Go語言中的匿名結構體和欄位


Go語言中的匿名結構體和欄位是一個強大的特性,可以用來簡化和提高程式碼的可讀性。這些結構允許你動態定義新的資料型別,而無需建立新的命名結構體。

讓我們更詳細地研究一下 Go 中的匿名欄位和結構體。

什麼是匿名結構體?

在 Go 中,結構體是欄位的集合,可用於定義新的資料型別。通常,你會這樣定義一個命名結構體:

type Person struct {
   Name    string
   Age     int
   Address string
}

這建立了一個名為“Person”的新資料型別,它具有三個欄位:Name、Age 和 Address。

但是,如果你只需要在一個地方使用結構體並且不想為其命名,你可以這樣定義一個匿名結構體:

p := struct {
   Name    string
   Age     int
   Address string
}{
   Name:    "John Doe",
   Age:     35,
   Address: "123 Main St",
}

這建立了一個具有三個欄位(Name、Age 和 Address)的匿名結構體,並用值初始化它們。

你可以像這樣訪問匿名結構體的欄位:

fmt.Println(p.Name)
fmt.Println(p.Age)
fmt.Println(p.Address)

什麼是匿名欄位?

匿名欄位是結構體中沒有名稱的欄位。如果你想將一個結構體嵌入另一個結構體而無需按名稱引用它,這將非常有用。

這是一個例子:

type Person struct {
   Name    string
   Age     int
   Address struct {
      Street  string
      City    string
      Zipcode string
   }
}

在這個例子中,Person 結構體包含一個匿名欄位,該欄位本身就是一個具有三個欄位(Street、City 和 Zipcode)的結構體。

你可以像這樣訪問匿名欄位的欄位:

示例

package main

import "fmt"

type Person struct {
   Name    string
   Age     int
   Address struct {
      Street  string
      City    string
      Zipcode string
   }
}

func main() {
   p := Person{
      Name: "Sivaram",
      Age:  24,
      Address: struct {
         Street  string
         City    string
         Zipcode string
      }{
         Street:  "Main street",
         City:    "Vizianagaram",
         Zipcode: "535004",
      },
   }

   fmt.Println(p.Address.Street)
   fmt.Println(p.Address.City)
   fmt.Println(p.Address.Zipcode)
}

輸出

Main street
Vizianagaram
535004

在 Go 中使用匿名結構體和欄位

當你需要定義僅在一個地方使用的的資料型別,或者想要將一個結構體嵌入另一個結構體而無需按名稱引用它時,匿名結構體和欄位非常有用。

這些結構還可以透過減少混亂和改進資料組織來幫助提高程式碼的可讀性和可維護性。

但是,你應該注意不要過度使用匿名結構體和欄位,因為如果過度使用,它們會使你的程式碼難以理解。

結論

匿名結構體和欄位是 Go 中的一個強大特性,可以簡化你的程式碼並提高其可讀性。它們可以用來動態定義新的資料型別,而無需建立新的命名結構體,或者將一個結構體嵌入另一個結構體而無需按名稱引用它。

更新於:2023年4月6日

1K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.