我有以下查询构建器功能:
func CreateQuery(t interface{}, where string) {
var b bytes.Buffer
b.WriteString("SELECT ")
s := reflect.ValueOf(t).Elem()
typeOfT := s.Type()
for i := 0; i < s.NumField() - 1; i++ {
b.WriteString(fmt.Sprintf("%s, ", typeOfT.Field(i).Name))
}
//Last one has no Comma
b.WriteString(fmt.Sprintf("%s ", typeOfT.Field(s.NumField() - 1).Name))
b.WriteString(fmt.Sprintf("FROM %s ", typeOfT.Name()))
b.WriteString(where)
fmt.Println(b.String())
}
按如下方式调用时工作正常:
var dst FooStruct
CreateQuery(&dst, "")
但以下引发了“对切片值调用reflect.Value.NumField”恐慌:
var dst []FooStruct
CreateQuery(&dst, "")
我怎样才能让函数打印切片的底层结构类型的字段?似乎我想要反射SliceOf功能的倒数。
蝴蝶刀刀
12345678_0001
相关分类