golang中切片结构的setter方法

我有一个定义如下的支柱


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))

}

当我尝试制作Useras slice 时,上述函数出现错误。


prog.go:27:65: 不能使用 j.Request.Data.Object.User(类型 []User)作为返回参数中的 User 类型 prog.go:28:64:不能使用 u(类型 User)作为类型 []任务中的用户


我是 Golang 的新手,所以不知道如何让 Setter 和 Ctor 返回切片对象。


慕村225694
浏览 114回答 2
2回答

犯罪嫌疑人X

如果将单个嵌入式用户结构更改为用户列表,则需要在所有位置进行更改。Golang 是强类型的,一部分用户与单个用户结构是不同的类型。以下代码有效package mainimport (    "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))}

幕布斯6054654

它显示错误,因为ReqJSON结构包含一个字段,User该字段是结构的一部分User,但是当您设置结构的值时,User您没有在设置函数内部传递用户结构的一部分。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"`}如果要初始化包含not切片的ReqJSON结构内部的字段,则需要在 Setter 函数中传递一个 User 结构切片。在 main 中传递用户结构的切片:UserUservar u []Useru = append(u, User{    UserID:    "_id",    IPAddr:    "1.1.1.1",    Noofusers: "100",    Qos:       "34",    ID:        "kldjflkdfjlkdjfkld",    Domain:    "xyz.com",})j.SetUser(u)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go