我的支撑杆定义如下
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(类型[] User)用作 在返回参数prog.go:28:64中键入User:不能使用u(键入User) 作为[]分配中的用户
我是Golang的新手,所以无法弄清楚如何使Setter和Ctor返回切片对象。
答案 0 :(得分:1)
如果将单个嵌入式用户结构更改为用户列表,则需要在任何地方进行更改。 Golang是强类型的,一部分用户是与单个用户结构不同的类型。以下代码有效
package main
import (
"fmt"
"encoding/json"
)
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"`
}
func (j *ReqJSON) User() []User { return j.Request.Data.Object.User }
func (j *ReqJSON) SetUsers(u []User) { j.Request.Data.Object.User = u }
func main() {
var j ReqJSON
j.SetUsers([]User{
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))
}
答案 1 :(得分:0)
由于ReqJSON
结构包含User
的字段,该字段是User
结构的一部分,但是您在设置User
结构的值时会显示错误没有在setter函数内传递User struct的片段。
type ReqJSON struct {
Request struct {
Data struct {
Object struct {
User []User `json:"user"` // this is a slice of User struct
} `json:"object"`
} `json:"data"`
} `json:"request"`
}
如果要初始化包含ReqJSON
而不是User
的切片的User
结构中的字段,则需要在Setter函数中传递用户结构的一部分。在main内部将User struct的切片传递为:
var u []User
u = append(u, User{
UserID: "_id",
IPAddr: "1.1.1.1",
Noofusers: "100",
Qos: "34",
ID: "kldjflkdfjlkdjfkld",
Domain: "xyz.com",
})
j.SetUser(u)
Go Playground上的工作代码