首頁 > 後端開發 > Golang > 主體

如何在 Go 中的結構體切片之間安全轉換:類型轉換和最佳實踐指南

Linda Hamilton
發布: 2024-10-31 10:50:02
原創
295 人瀏覽過

How to Safely Convert Between Slices of Structs in Go: A Guide to Type Conversion and Best Practices

Go 中結構體切片之間的類型轉換

在Go 中使用結構體切片時,了解不同結構體切片之間的差異非常重要類型。在本例中,我們有以下類型:

  • ListSociete:用於儲存 Societe 結構清單的自訂結構類型。
  • [ ]Societe:Societe 結構體的切片。
  • []struct{Name string json:"a.name"}: 具有單一欄位 Name 和 a 的匿名結構體類型JSON標籤。

問題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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板