將結構體切片轉換為介面切片
嘗試將結構體切片分配給介面切片時,例如將資料傳遞到AppEngine的datastore.PutMulti 的情況下,您可能會因類型不相容而遇到編譯錯誤。這個錯誤可能是這樣的:「在賦值中不能使用type []*MyStruct 作為type []interface { }。」
要理解這個問題,必須認識到將一片結構分配給一片介面涉及的不僅僅是簡單的類型轉換。相反,每個結構元素必須單獨包裝在介面中。此過程會建立一個指向原始結構的指針,並包含其類型的描述符。
因此,沒有直接或自動的方法將結構片段複製到介面片段。必須明確複製每個元素並將其包裝在介面中才能實現所需的輸出。因此,唯一可行的解決方案是一次對一個元素執行賦值。
以以下程式碼片段為例:
var src []*MyStruct = append(src, &MyStruct {...}) var dest []interface{} for _, s := range src { dest = append(dest, s) }
在此範例中,結構體切片被迭代透過將每個結構明確包裝在介面中,將其附加到介面切片中。雖然這個過程可能很乏味,但它是成功將一片結構轉換為一片介面的唯一方法。
以上是如何在 Go 中將結構體切片轉換為介面切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!