首頁 > 後端開發 > Golang > 為什麼 Go 中不能轉換不同類型的切片?

為什麼 Go 中不能轉換不同類型的切片?

DDD
發布: 2024-10-31 16:40:30
原創
812 人瀏覽過

Why Can't You Convert Slices of Different Types in Go?

為什麼無法轉換切片型?

無法轉換不同類型的切片(如提供的程式碼片段所示)是由於特定類型轉換造成的Go 規格中概述的規則。這些規則控制何時可以將非常量值轉換為特定類型。

任何轉換規則都不適用於您嘗試將 Bar 切片轉換為 Foo 切片的情況。雖然 Foo 和 Bar 的底層類型相同,但它們各自切片的底層類型卻不同。這導致無法將 []Foo 值指派給 []Bar 類型的變數。

了解底層類型

需要注意的是,底層類型變數的類型不一定與變數本身的類型相同。對於切片,元素類型是基礎類型。因此,雖然 Foo 和 Bar 具有相同的底層類型 (Foo),但 []Foo 和 []Bar 卻沒有。

實用解決方案

解決此問題,您可以建立一個中間類型,將 Bar 別名為 Foo。這種方法之所以有效,是因為切片的元素類型保持不變。例如:

<code class="go">type Foo struct { A int }
type Bar Foo

type Foos []Foo
type Bars Foos

func main() {
    foos := []Foo{Foo{1}, Foo{2}}
    bars := Bars(foos)

    fmt.Println(bars)
}</code>
登入後複製

輸出:

[{1} {2}]
登入後複製

此解決方案建立具有相同基礎元素類型的切片,允許它們之間的轉換。

不安全注意事項

需要注意的是,雖然在技術上可以使用不安全操作將Foo 的切片「查看」為Bar 的切片,但這種方法規避了類型安全。為了安全性和可靠性,建議使用上面概述的類型別名方法。

以上是為什麼 Go 中不能轉換不同類型的切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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