我正在尝试使用提供的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)并收集位置类型信息,以便稍后在迭代器中设置字段。对于非本机类型,此步骤失败。
我尝试了一些方法来解决这个问题,但唯一可行的方法是将时间戳更改为字符串。我无疑错过了一些东西,非常感谢一些指导。