在 Go 中,给定以下函数,是否可以在运行时不知道 jsonString
的类型的情况下解组 c
?
func findChargedItems(fs financialService, conditions []string) ([]*models.ChargedItem, error) {
var jsonResult []string
f := getChargedItemsQuery(conditions)
q, _, _ := f.ToSql()
err := fs.db.Select(&jsonResult, q)
if err != nil {
return nil, err
}
jsonString := fmt.Sprintf("[%v]", strings.Join(jsonResult, ","))
c := make([]*models.ChargedItem, 0)
err = json.Unmarshal([]byte(jsonString), &c)
if err != nil {
return nil, err
}
return c, nil
}
问题是我有大量模型需要执行这个确切的过程,我正在重复自己以实现这一目标。我只想拥有一个“通用”函数 findEntities
,它对 ChargedItem
和 getChargedItemsQuery
进行操作。我意识到我可以只为 getChargeditemsQuery
传递一个函数,这样就可以解决这个问题,但是我遇到了 json.Unmarshal
的问题,例如,当我尝试使用接口时,json 字段没有正确映射。有没有办法在不影响数据模型的情况下实现我想要做的事情?
答案 0 :(得分:0)
我不确定您要做什么,但这可能不是一个好主意。在任何 率,这应该做你想要的:
package main
import (
"encoding/json"
"fmt"
)
func main() {
// do what youre trying to do
var (
a = []byte("[10, 11]")
b []interface{}
)
json.Unmarshal(a, &b)
// then fix it later
c := make([]float64, len(b))
for n := range c {
c[n] = b[n].(float64)
}
fmt.Println(c)
}