Go 中的介面切片和結構體數組
在Go 中,將結構體切片([]MyStruct) 分配給介面切片([ ]interface{}) 是不可能直接實現的。這是因為結構體和介面使用不同的記憶體表示形式。
結構體欄位在記憶體中是連續的,而介面則儲存為類型資訊和資料對。這種差異阻止了兩者之間的直接轉換。
為什麼直接賦值失敗
嘗試將x(結構體切片)分配給y(介面)時出現編譯器錯誤slice)反映了這種潛在的差異。 Go 要求賦值時類型相容,而這兩種類型不符。
處理通用物件數組的替代方案
儘管無法直接將結構體數組賦值給介面切片, Go提供了幾個處理通用物件的替代方法陣列:
範例程式碼
// Copy Elements Individually var x []MyStruct = [...]MyStruct{{5}, {6}} var y []interface{} for _, v := range x { y = append(y, v) } // Interface Slices var x []MyStruct = [...]MyStruct{{5}, {6}} var y []interface{} = make([]interface{}, len(x)) for i, v := range x { y[i] = v } // Interface Wrapper type MyStructArrayWrapper interface { Get() []MyStruct } type MyStructArrayWrapperImpl struct { array []MyStruct } func (w *MyStructArrayWrapperImpl) Get() []MyStruct { return w.array } x := []MyStruct{MyStruct{5}, MyStruct{6}} var y interface{} = &MyStructArrayWrapperImpl{x}
以上是如何將 Go 結構體切片分配給介面切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!