在 Go 語言(Golang)中,結構體(Struct)是一種復合數(shù)據(jù)類型,它允許你將零個或多個不同類型的命名項組合成一個單一的類型。結構體是一種非常靈活的數(shù)據(jù)表示方式,常用于表示具有多個屬性的復雜對象。
你可以使用 type
關鍵字和 struct
關鍵字來聲明一個結構體。結構體中的每個項稱為字段(Field),字段之間使用分號(;
)或換行符來分隔(在 Go 中,通常使用換行符來分隔字段)。
type Person struct {
Name string
Age int
Email string
}
在這個例子中,Person
是一個結構體類型,它有三個字段:Name
(字符串類型)、Age
(整型)和 Email
(字符串類型)。
有幾種方法可以初始化結構體變量:
p := Person{
Name: "John Doe",
Age: 30,
Email: "john.doe@example.com",
}
p := Person{"John Doe", 30, "john.doe@example.com"}
但請注意,這種方法依賴于字段的聲明順序,如果將來結構體定義發(fā)生變化,這種初始化方式可能會引入錯誤。
new
關鍵字(不常用,因為它只分配了內存,并返回了指向零值的指針):p := new(Person)
p.Name = "John Doe"
p.Age = 30
p.Email = "john.doe@example.com"
你可以通過點(.
)操作符來訪問結構體變量的字段。
fmt.Println(p.Name) // 輸出: John Doe
在 Go 中,你經常會看到結構體通過指針來傳遞和訪問。這樣做的好處是可以避免在函數(shù)之間傳遞大型結構體時的數(shù)據(jù)復制開銷,并且可以直接修改結構體中的字段。
func modifyPerson(p *Person) {
p.Age = 31
}
func main() {
p := Person{Name: "John Doe", Age: 30, Email: "john.doe@example.com"}
modifyPerson(&p)
fmt.Println(p.Age) // 輸出: 31
}
在這個例子中,modifyPerson
函數(shù)接收一個指向 Person
結構體的指針作為參數(shù),并修改了結構體中的 Age
字段。由于 p
在 main
函數(shù)中是通過 &p
(即 p
的地址)傳遞給 modifyPerson
的,因此 main
函數(shù)中的 p
也會看到 Age
字段的修改。
Go 語言允許你在一個結構體中嵌套另一個結構體作為字段。
type Address struct {
City, State string
}
type Person struct {
Name string
Age int
Address Address
}
在這個例子中,Person
結構體包含一個 Address
類型的字段,這允許你將 Address
結構體作為 Person
結構體的一部分來組織和訪問數(shù)據(jù)。
上一篇: Golang 語言指針
下一篇: Golang 語言切片(Slice)