為什麼將[]string 轉換為[]interface{} 會在Go 中引發編譯錯誤
轉換字串切片([] string)考慮到它們共享切片特徵以及[]string 的每個元素都可以被視為一個接口,Go 中的接口切片([]interface{}) 似乎很簡單。然而,嘗試這種轉換時會出現編譯錯誤,讓程式設計師感到困惑。
技術講解
產生此錯誤的原因在於它們的記憶體佈局不同。每個 []string 元素僅儲存字串值。相反,每個 []interface{} 元素也保存類型資訊。因此,這兩種切片類型之間的轉換需要資料複製。
自動轉換影響
語言的自動轉換可能會導致混亂和複雜化。考慮一個採用 []string 切片的函數 f(s)。如果允許自動轉換為 []interface{},則該函數可能會修改原始切片中的字串,這不是預期的行為。然而,使用 []interface{} 參數,f(s) 內的修改不會影響原始切片。
結論
雖然轉換似乎合乎邏輯從字串切片到介面切片,但它們記憶體佈局的根本差異阻止了 Go 中的這種自動轉換。這有助於保持程式碼的清晰度,因為基於參數類型的預期行為保持一致且可預測。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3