【发布时间】:2018-10-03 15:32:22
【问题描述】:
我有一个如下定义的支柱
type ReqJSON struct {
Request struct {
Data struct {
Object struct {
User []User `json:"user"`
} `json:"object"`
} `json:"data"`
} `json:"request"`
}
type User struct {
UserID string `json:"userid"`
IPAddr string `json:"ipaddr"`
Noofusers string `json:"noofusers"`
Qos string `json:"qos"`
ID string `json:"id"`
Domain string `json:"domain"`
}
这个结构体的setter函数如下
func (j *ReqJSON) User() User { return j.Request.Data.Object.User }
func (j *ReqJSON) SetUser(u User) { j.Request.Data.Object.User = u }
主程序如下
func main() {
var j ReqJSON
j.SetUser(User{
UserID: "_id",
IPAddr: "1.1.1.1",
Noofusers: "100",
Qos: "34",
ID: "kldjflkdfjlkdjfkld",
Domain: "xyz.com",
})
b, err := json.MarshalIndent(j, "", " ")
fmt.Println(err, string(b))
}
当我尝试将User 设为切片时,上述函数出现错误。
prog.go:27:65: 不能使用 j.Request.Data.Object.User (type []User) 作为 在返回参数 prog.go:28:64 中键入用户:不能使用 u(用户类型) 作为类型 [] 分配中的用户
我是 Golang 的新手,所以无法弄清楚如何让 Setter 和 Ctor 返回切片对象。
【问题讨论】:
-
显示“将用户设为切片”的代码。
-
显示失败的代码并提供您遇到的错误。
-
我把它粘贴到了goplayground,没有报错:play.golang.org/p/VvuwHJShXBw你看到了什么错误?
-
如果你使用更新的结构运行它会报错
-
@Abhinav 您没有将用户切片传递给 setter 函数,这就是错误的原因。