亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 *[]foo 類型的變量轉換為 *[]bar

將 *[]foo 類型的變量轉換為 *[]bar

Go
aluckdog 2023-07-26 17:45:23
type foo struct {    Field1 int    Field2 string}type bar struct {    Field1 int    Field2 string}func main() {    x := foo{1, "Hello"}    y := bar(x)    a := [...]foo{x, x}    b := a[:]    c := (*[]bar)(&b)    fmt.Println(x, y, a, b, c)}我想在兩個相同的結構之間進行轉換。主要是在兩個結構體上使用不同的json標簽。有沒有辦法做到這一點?我已經嘗試過上面的示例以及帶有指針切片而不是指向切片的指針的示例。徒勞無功。
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

語言規范允許在具有相同字段(忽略標簽)的結構類型之間進行轉換。

因此,創建另一個切片(類型為[]bar),并使用一個簡單的循環來填充它,將每個個體轉換foobar

foos := []foo{

? ? {1, "Hello"},

? ? {2, "Bye"},

}


bars := make([]bar, len(foos))

for i, f := range foos {

? ? bars[i] = bar(f)

}


fmt.Println(foos, bars)

在Go Playground上嘗試一下。

請注意,由于我們正在分配結構值,所以所有字段都會被復制。如果您不想復制整個結構,可以使用指針:

foos := []*foo{

? ? {1, "Hello"},

? ? {2, "Bye"},

}


bars := make([]*bar, len(foos))

for i, f := range foos {

? ? bars[i] = (*bar)(f)

}


fmt.Println(foos, bars)

for i := range foos {

? ? fmt.Println(foos[i], bars[i])

}

這將輸出(在Go Playground上嘗試):

[0x40a0e0?0x40a0f0]?[0x40a0e0?0x40a0f0]
&{1?Hello}?&{1?Hello}
&{2?Bye}?&{2?Bye}

foos從輸出中可以看出,和切片中的指針bars是相同的,但第一個包含類型 的值*foo,而后者包含類型 的值*bar。



查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號