首頁 >後端開發 >Golang >Go的`interface{}`陣列可以直接保存結構體陣列嗎?

Go的`interface{}`陣列可以直接保存結構體陣列嗎?

DDD
DDD原創
2024-11-27 12:46:12946瀏覽

Can Go's `interface{}` Arrays Directly Hold Struct Arrays?

在 Go 中將結構體數組分配給介面數組

在 Go 中,將結構體數組直接分配給介面數組會引發編譯時錯誤。要了解原因,讓我們深入研究底層機制。

介面儲存

interface{} 表示可以儲存任何值的泛型類型。但是,它在內部表示為兩個單字對:

  1. 鍵入單字: 保存有關基礎資料類型的信息。
  2. 資料單字: 儲存實際資料值。

結構體儲存

與介面相比,結構體將其欄位連續儲存在記憶體中,沒有單獨的型別字。

賦值問題

由於結構體和介面具有不同的記憶體表示形式,因此它們不能直接賦值。類型系統確保這一點以維護類型安全。

解決方法

要實現所需的行為,請考慮以下選項:

使用介面切片

您可以建立介面切片並指派結構元素分別:

y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}

將介面儲存到切片

或者,將介面儲存到結構切片:

var y interface{}
y = x 

以上是Go的`interface{}`陣列可以直接保存結構體陣列嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn