1 回答

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
前言:如果你只有類型person而沒有類型person2,你要先寫person2。Go 是靜態(tài)類型語言,你不能只person2在運(yùn)行時(shí)創(chuàng)建。您可以person2手動(dòng)編寫或go generate通過自己編寫生成器代碼來使用,但不會(huì)更簡單。
您也可以使用類似的東西map[string]interface{}來模擬動(dòng)態(tài)結(jié)構(gòu),但這不會(huì)更友好也不會(huì)更快。更不用說你必須使用類型斷言,因?yàn)橹殿愋褪莍nterface{}......
要?jiǎng)?chuàng)建的值person2從一個(gè)值person,你不需要思考,你可以簡單的手工代碼吧:
func transform(p person) person2 {
return person2{
p.name,
[]struct{ value string }{{p.phone}},
[]struct{ value string }{{p.address}},
}
}
請(qǐng)注意,這可能看起來有點(diǎn)奇怪,這是因?yàn)槟鸀閜erson2.phoneand使用了匿名結(jié)構(gòu)的切片person2.address,并且要使用復(fù)合文字初始化匿名結(jié)構(gòu),必須重復(fù)匿名結(jié)構(gòu)定義。
測試它:
p := person{"Bob", "1234", "New York"}
fmt.Println(p)
p2 := transform(p)
fmt.Println(p2)
輸出(在Go Playground上試試):
{Bob 1234 New York}
{Bob [{1234}] [{New York}]}
筆記:
請(qǐng)注意,您person2不必要地復(fù)雜。它可以像這樣簡單:
type person2 struct {
name string
phones []string
addresses []string
}
然后轉(zhuǎn)換是單行的:
func transform(p person) person2 {
return person2{p.name, []string{p.phone}, []string{p.address}}
}
輸出(在Go Playground上試試):
{Bob 1234 New York}
{Bob [1234] [New York]}
- 1 回答
- 0 關(guān)注
- 183 瀏覽
添加回答
舉報(bào)