Go 语言结构体学习笔记
什么是结构体?
结构体是一种用户定义的数据类型,它可以包含不同类型的数据字段。在 Go 语言中,结构体是基本类型之一,可以像 int、float32 等数据类型一样进行操作。
定义结构体
可以通过 type 和 struct 关键字来定义结构体,例如:
goCopy Codetype Person struct {
Name string
Age int
Sex string
}
上面的代码定义了一个名为 Person 的结构体,它包含了三个字段:Name、Age 和 Sex,分别表示人的姓名、年龄和性别。
创建结构体对象
通过结构体定义创建结构体对象,例如:
goCopy Codeperson := Person{Name: "Tony", Age: 18, Sex: "Male"}
上面的代码创建了一个名为 person 的结构体对象,并赋值为 Tony、18 和 Male。
访问结构体字段
结构体对象中的字段可以通过点号(.)来访问,例如:
goCopy Codefmt.Println(person.Name) // 输出:Tony
fmt.Println(person.Age) // 输出:18
fmt.Println(person.Sex) // 输出:Male
上面的代码分别输出了 person 结构体对象中的 Name、Age 和 Sex 字段的值。
结构体作为参数
结构体可以作为函数的参数进行传递。例如:
goCopy Codefunc printPerson(person Person) {
fmt.Printf("Name: %s, Age: %d, Sex: %s\n", person.Name, person.Age, person.Sex)
}
func main() {
person := Person{Name: "Tony", Age: 18, Sex: "Male"}
printPerson(person)
}
上面的代码定义了一个名为 printPerson 的函数,接受一个类型为 Person 的参数。在 main 函数中,创建一个 person 结构体对象,并将其作为参数传递给 printPerson 函数。
结构体指针
结构体指针是一种指向结构体的指针变量。可以通过 & 符号获取结构体指针。例如:
goCopy CodepersonPtr := &Person{Name: "Tony", Age: 18, Sex: "Male"}
上面的代码创建了一个指向 person 结构体对象的指针变量。
可以通过 * 符号对结构体指针进行解引用,访问结构体字段。例如:
goCopy Codefmt.Println((*personPtr).Name) // 输出:Tony
fmt.Println((*personPtr).Age) // 输出:18
fmt.Println((*personPtr).Sex) // 输出:Male
上面的代码输出了指针变量 personPtr 指向的结构体对象中的 Name、Age 和 Sex 字段的值。由于这样的语法十分繁琐,Go 语言还提供了一种简洁的语法:
goCopy Codefmt.Println(personPtr.Name) // 输出:Tony
fmt.Println(personPtr.Age) // 输出:18
fmt.Println(personPtr.Sex) // 输出:Male
上面的代码使用了 personPtr.Name、personPtr.Age 和 personPtr.Sex 的语法来访问结构体字段,这种语法更加简洁易读。
实例
下面是一个使用结构体的示例程序:
goCopy Codepackage main
import "fmt"
type Person struct {
Name string
Age int
Sex string
}
func printPerson(person Person) {
fmt.Printf("Name: %s, Age: %d, Sex: %s\n", person.Name, person.Age, person.Sex)
}
func main() {
person := Person{Name: "Tony", Age: 18, Sex: "Male"}
printPerson(person)
personPtr := &Person{Name: "Alice", Age: 20, Sex: "Female"}
fmt.Println(personPtr.Name)
}
运行上面的代码,输出如下:
Copy CodeName: Tony, Age: 18, Sex: Male
Alice