2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果你有匿名的、未命名的結(jié)構(gòu)類(lèi)型,那么如果你重復(fù)結(jié)構(gòu)定義,你只能用復(fù)合文字初始化它們。這很不方便。
因此,請(qǐng)改用命名結(jié)構(gòu)類(lèi)型,這樣您就可以像這樣在復(fù)合文字中使用它們:
類(lèi)型:
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
}
req := &tokenRequest{
? ? auth: auth{
? ? ? ? identity: identity{
? ? ? ? ? ? methods: []string{"password"},
? ? ? ? ? ? password: password{
? ? ? ? ? ? ? ? user: user{
? ? ? ? ? ? ? ? ? ? name: os.Username,
? ? ? ? ? ? ? ? ? ? domain: domain{
? ? ? ? ? ? ? ? ? ? ? ? id: "default",
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? password: os.Password,
? ? ? ? ? ? ? ? },
? ? ? ? ? ? },
? ? ? ? },
? ? },
}

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
你可以,但你會(huì)打很多字:
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 你正在初始化什么類(lèi)型的變量,所以你只需定義相同的匿名結(jié)構(gòu),每次緩慢但肯定地刪除一個(gè)級(jí)別。
出于這個(gè)原因,最好使用命名結(jié)構(gòu),這樣您就不必重復(fù)自己。
- 2 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)