如何在GO中初始化多层嵌套结构?
我试图在GO中初始化以下结构: 这是结构:如何在GO中初始化多层嵌套结构?,go,struct,composite-literals,Go,Struct,Composite Literals,我试图在GO中初始化以下结构: 这是结构: type tokenRequest struct { auth struct { identity struct { methods []string password struct { user struct { name string domain struct
type tokenRequest struct {
auth struct {
identity struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}
}
}
这是我的代码:
req := &tokenRequest{
auth: struct {
identity: struct {
methods: []string{"password"},
password: {
user: {
name: os.Username,
domain: {
id: "default",
},
password: os.Password,
},
},
},
},
}
我是否可以在不单独定义所有嵌套结构的情况下进行初始化(即auth
、identity
、password
、user
)
谢谢。如果您有匿名、未命名的结构类型,则只有在重复结构定义时,才能使用复合文字对其进行初始化。这很不方便 因此,请改为使用命名结构类型,以便可以在复合文本中使用它们,如下所示: 类型:
type domain struct {
id string
}
type user struct {
name string
domain domain
password string
}
type password struct {
user user
}
type identity struct {
methods []string
password password
}
type auth struct {
identity identity
}
type tokenRequest struct {
auth auth
}
然后初始化它(在上尝试):
请参阅相关问题:您可以,但您将要键入一批:
package main
import (
"fmt"
"net/http"
)
type tokenRequest struct {
auth struct {
identity struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}
}
}
func main() {
s := tokenRequest{
auth: struct {
identity struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}
}{
identity: struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}{
methods: []string{http.MethodGet, http.MethodPost},
password: struct {
user struct {
name string
domain struct {
id string
}
password string
}
}{
user: struct {
name string
domain struct {
id string
}
password string
}{
name: "username",
domain: struct {
id string
}{
id: "domain id",
},
password: "password",
},
},
},
},
}
fmt.Printf("%+v\n", s)
}
你必须告诉Go你正在初始化什么类型的变量,所以你只需要定义同一个匿名结构,每次缓慢但肯定地删除一个级别
出于这个原因,最好使用命名结构,这样您就不必重复自己的操作。为什么您键入的速度比我快:(@syntaqx我打赌icza构建了一个机器人,可以将通知发送到他的HUD。他总是第一位的。分享关于效率低下的精彩视频。谢谢!
package main
import (
"fmt"
"net/http"
)
type tokenRequest struct {
auth struct {
identity struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}
}
}
func main() {
s := tokenRequest{
auth: struct {
identity struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}
}{
identity: struct {
methods []string
password struct {
user struct {
name string
domain struct {
id string
}
password string
}
}
}{
methods: []string{http.MethodGet, http.MethodPost},
password: struct {
user struct {
name string
domain struct {
id string
}
password string
}
}{
user: struct {
name string
domain struct {
id string
}
password string
}{
name: "username",
domain: struct {
id string
}{
id: "domain id",
},
password: "password",
},
},
},
},
}
fmt.Printf("%+v\n", s)
}