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
),并使用一個簡單的循環來填充它,將每個個體轉換foo
為bar
:
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
。
- 1 回答
- 0 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消