【发布时间】:2019-11-11 19:55:38
【问题描述】:
我正在处理的项目应该读取一个文件,然后根据该文件生成插入。 现在,脚本有效(有点)。 在为表创建结构时遇到了一个问题,特别是对于 float64 的字段。 我编写的脚本说明了 string 和 int 类型的字段。我可以插入具有这些字段类型的表中,但是如果我的数据库中有一个浮点字段,则脚本不会插入任何数据。 以下是我的脚本当前设置为检查 int 和 string 类型的方式。
func UnmarshalCsvRecord(readerTest *csv.Reader, v interface{}) error {
recordtest, err := readerTest.Read()
if err != nil {
return err
}
s := reflect.ValueOf(v).Elem()
if s.NumField() != len(recordtest) {
return &CheckField{s.NumField(), len(recordtest)}
}
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
switch f.Type().String() {
case "string":
f.SetString(recordtest[i])
case "int":
ival, err := strconv.ParseInt(recordtest[i], 10, 0)
if err != nil {
return err
}
f.SetInt(ival)
default:
return &UnsupportedCheck{f.Type().String()}
}
}
return nil
}
type CheckField struct {
expected, found int
}
func (e *CheckField) Error() string {
return "CSV line fields mismatch. Expected " + strconv.Itoa(e.expected) + " found " + strconv.Itoa(e.found)
}
type UnsupportedCheck struct {
TypeCheck string
}
func (e *UnsupportedCheck) Error() string {
return "Unsupported type: " + e.TypeCheck
}
我可以做些什么来解释我的结构中的 float64 字段?
type ClientSalesTable struct {
ID int `csv:"id"`
Amount float64 `csv:"amount"`
ClientName string `csv:"clientName"`
}
【问题讨论】:
-
关于您的实现的一个小建议:将开关条件更改为
f.Type().Kind()并在您的开关案例中使用Kind常量。
标签: go