反思时间类型

时间:2015-07-13 16:36:07

标签: reflection struct go

我正在尝试使用提供的here示例编写csv解析器。它适用于所有本机类型,但我遇到任何包含time.amp类型的时间戳的结构都有问题。退出时出现错误"无法转换此类型"。

这是代码。

//For each field in a given struct...
    //Get a field
    val := sv.Field(i)
    // this is necessary because Kind can't tell 
    // distinguish between a primitive type
    // and a type derived from it. We're looking 
    // for a Value interface defined on
    // the pointer to this value
    _, ok := val.Addr().Interface().(Value)
    if ok {
        val = val.Addr()
        kind = value_k
    } else {
        switch Kind {
        case reflect.Int, reflect.Int16, reflect.Int8, 
             reflect.Int32, reflect.Int64:
            kind = int_k
        case reflect.Uint, reflect.Uint16, reflect.Uint8, 
             reflect.Uint32, reflect.Uint64:
            kind = uint_k
        case reflect.Float32, reflect.Float64:
            kind = float_k
        case reflect.String:
            kind = string_k
        default:
                  // Kind is Struct here
            kind = value_k
            _, ok := val.Interface().(Value)
            if !ok {
                err = os.NewError("cannot convert this type ")
                this = nil
                return
            }
        }
    }

这段代码的作用是接口和阅读器。它尝试将阅读器中的字段标题(csv文件)与界面中的字段名称进行匹配。它还反映了接口(struct)并收集位置类型信息,以便稍后在迭代器中设置字段。对于非本机类型,此步骤失败。

我尝试了一些方法来解决这个问题,但唯一可行的方法是将时间戳更改为字符串。我无疑错过了一些东西,非常感谢一些指导。

0 个答案:

没有答案