首頁 >後端開發 >Golang >Go 中的嵌入式基元類型是否具有任何真正的優勢?

Go 中的嵌入式基元類型是否具有任何真正的優勢?

Linda Hamilton
Linda Hamilton原創
2024-12-03 01:36:31199瀏覽

Do Embedded Primitive Types in Go Offer Any Real Advantages?

嵌入類型:探索原始嵌入的有用性

使用 Go 結構體時,可能會出現嵌入原始類型的概念。考慮下面的程式碼片段:

type User struct {
    int32
    Name string
}

此程式碼定義了一個嵌入 int32 基元類型的 User 結構。然而,關於這種嵌入的實用性出現了問題:

嵌入式基元有方法嗎?

沒有,像 int32 這樣的嵌入式基元沒有任何與之關聯的方法。為了驗證這一點,可以使用反射來檢查可用方法的數量:

fmt.Println(reflect.TypeOf(int32(0)).NumMethod())

輸出將為 0,表示 int32 沒有方法。

存取嵌入式原語Values

要存取 User 實例中嵌入的 int32 值,可以直接使用非限定型別name作為欄位名稱:

u := User{3, "Bob"}
fmt.Printf("%#v\n", u)
u.int32 = 4
fmt.Println(u.int32)

輸出:

main.User{int32:3, Name:"Bob"}
4

嵌入的優點

雖然直接嵌入原始類型可能無法提供直接存取相對於方法來說,它在處理介面和方法時確實提供了一定的優勢重寫。

  • 嵌入類型的提升方法可以簡化介面實作。
  • 可以在嵌入類型中重寫方法,從而在與該類型的值互動時允許自訂行為。
  • 嵌入字段得到提升,縮短了對這些字段的引用

嵌入預聲明類型的缺點

嵌入int32 等預聲明類型的缺點

  • 嵌入int32 等預聲明類型時,需要考慮一個缺點:
以小寫字母開頭的嵌入式預聲明類型會自動未匯出,限制了它們的可訪問性。

以上是Go 中的嵌入式基元類型是否具有任何真正的優勢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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