Go 中結構體切片之間的類型轉換
在Go 中使用結構體切片時,了解不同結構體切片之間的差異非常重要類型。在本例中,我們有以下類型:
問題1:[]struct{Name string} 和 []struct{Name string json:"a.name" } 不一樣嗎?
是的,它們是不同的,因為 JSON 標籤 json:"a.name"。 Go 規格明確規定,只有當兩個結構體類型具有相同的欄位、名稱、類型、 和 標籤時,它們才是相同的。
問題 2: ListSociete 和 []struct{Name string} 不同嗎?
是的,它們不同,因為 ListSociete 是自訂類型,而 []struct{Name string} 是匿名類型。它們也有不同的欄位名稱。
_解:
這些類型之間的轉換有兩種選項:
方案一:透過迭代進行複製
此方法安全可靠,但需要明確複製:
<code class="go">ls := make(ListSociete, len(res)) for i := 0; i < len(res); i++ { ls[i].Name = res[i].Name } return ls, nil</code>
方案二:不安全轉換
此不安全方法直接轉換底層資料結構:
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
此方法應謹慎使用,因為它可能會導致意外行為.
_遊樂場範例:http://play.golang.org/p/lfk7qBp2Gb
以上是如何在 Go 中的結構體切片之間安全轉換:類型轉換和最佳實踐指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!