在 Go 语言中,结构体(struct)是一种用户自定义的复合数据类型,它允许你将多个不同类型的数据项组合成一个单一的数据结构。结构体在 Go 中非常有用,常用于表示复杂的数据结构,如用户信息、配置设置等。
定义结构体
结构体可以通过 struct
关键字来定义。下面是一个基本的结构体定义的例子:
package main
import "fmt"
// 定义一个结构体
type Person struct {
Name string
Age int
City string
}
func main() {
// 创建结构体实例
person1 := Person{Name: "Alice", Age: 30, City: "New York"}
// 访问结构体字段
fmt.Println("Name:", person1.Name)
fmt.Println("Age:", person1.Age)
fmt.Println("City:", person1.City)
// 修改结构体字段
person1.Age = 31
fmt.Println("Updated Age:", person1.Age)
}
结构体字面量
在 Go 中,你可以使用结构体字面量来创建结构体的实例。结构体字面量允许你直接在代码中初始化结构体的字段。有两种方式:
-
指定字段名:
person := Person{Name: "Bob", Age: 25, City: "Los Angeles"}
-
省略字段名(字段顺序必须与结构体定义中的顺序相同):
person := Person{"Charlie", 28, "Chicago"}
匿名字段
结构体可以包含匿名字段,这意味着你可以将一个完整的结构体嵌入到另一个结构体中,而不需要显式命名这个字段:
type ContactInfo struct {
Email string
Phone string
}
type Employee struct {
Person
Position string
ContactInfo // 匿名字段
}
func main() {
emp := Employee{
Person: Person{Name: "Diana", Age: 35, City: "Boston"},
Position: "Software Engineer",
ContactInfo: ContactInfo{Email: "[email protected]", Phone: "123-456-7890"},
}
fmt.Println("Employee Name:", emp.Name)
fmt.Println("Employee Email:", emp.Email)
}
方法和结构体
你可以为结构体定义方法,方法是与结构体关联的函数。方法接收一个指向结构体实例的指针或值作为第一个参数:
func (p Person) Greet() string {
return "Hello, " + p.Name + "!"
}
func main() {
person := Person{Name: "Eve", Age: 22, City: "Denver"}
fmt.Println(person.Greet())
}
在这个例子中,Greet
是一个方法,它属于 Person
结构体,并且使用值接收器。