Go语言5-结构体
一、结构体的定义
Go语言中结构体是一种自定义数据类型,跟C语言中的结构体定义类似,不过在Go语言中,结构体更像一个对象。
结构体定义语法如下:
type 结构体名 struct {
成员名1 类型1
成员名2 类型2
//...
}
其中"成员名"和"类型"的定义跟变量定义类似,多个成员之间使用换行或逗号隔开。
例如,定义一个表示人的结构体:
type Person struct {
Name string
Age int
Gender string
}
二、结构体的使用
定义结构体之后,我们就可以创建该类型的变量,给变量的成员赋值,使用结构体中的成员等。
1.创建结构体变量
创建结构体变量的常规方式是使用"var"关键字,并在其后跟结构体名,类似于变量声明。
例如:
var person Person
当然,也可以初始化结构体变量时对其成员进行初始化:
person := Person{Name:"张三", Age:18, Gender:"男"}
这会创建一个名为"person"的Person类型变量,并初始化其成员。
2.访问结构体成员
要访问结构体变量的成员,可以使用点"."操作符。
例如,访问上面的例子中"person"的名字:
name := person.Name
或者直接在结构体变量上使用"."操作符进行操作:
person.Name = "李四"
3.结构体的嵌套
结构体之间可以相互嵌套,形成更复杂的数据结构。
例如,定义一个表示城市的结构体:
type City struct {
Name string
Country string
Population int
}
然后将City结构体作为Person结构体的一个成员:
type Person struct {
Name string
Age int
Gender string
City City
}
这时,我们可以通过person.City.Name来访问城市的名字。
三、结构体的匿名成员
结构体可以包含匿名成员(也称为嵌入类型),又可以称作"组合"。
例如,定义一个表示书籍的结构体:
type Book struct {
Name string
Author string
Price float64
}
定义一个表示图书店的结构体,其中包含一个Book类型的匿名成员:
type BookStore struct {
Book
Address string
}
可以看到,BookStore中没有明确声明成员叫做"Book",但我们却可以通过BookStore访问其匿名成员。
例如,访问BookStore中的书名:
bookStore := BookStore{Book: Book{Name: "Go语言入门教程", Author: "张三", Price: 50.0}, Address: "北京市"}
name := bookStore.Name
可以看到,我们可以直接通过BookStore访问其成员Book,从而访问到Book的成员。
四、结构体的方法
结构体可以定义其自己的方法,类似于C++中的"类成员函数"。结构体方法的语法为:
func (s 结构体类型) 方法名 (参数列表) [返回值类型] {}
例如,为Person结构体定义一个方法,用来打印自己的基本信息:
func (p Person) PrintInfo() {
fmt.Println("姓名:", p.Name)
fmt.Println("年龄:", p.Age)
fmt.Println("性别:", p.Gender)
}
然后可以通过以下方式调用该方法:
person := Person{Name: "张三", Age: 18, Gender: "男"}
person.PrintInfo()
可以看到,我们将person传入PrintInfo方法中,在方法中可以直接访问person的成员。
五、小结
本文介绍了Go语言中结构体的定义、使用、嵌套和方法等基本概念。结构体是一种重要的自定义数据类型,是组织和存储数据的一个重要方式。掌握结构体相关概念,可以提高Go语言程序设计的能力。
