一、定义与特性
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,属于复合类型。结构体定义需要使用 type 和 struct 语句,定义如下:
type Address struct {
City string //字段名必须唯一
}
type 结构体名称 struct { //结构名同一包内不能重复
Name string //字段,或者称为成员变量;首字母大写,所有包有效
name string //首字母小写,仅本包有效
Addr Address //结构体之间可以嵌套
}
二、使用
1. 赋值取值
// 定义Library结构体,描述书籍信息
type Library struct {
title string // 书名
author string // 作者
price float64 // 价格
} // 程序入口函数
func main() {
x := Library{} // 初始化Library类型变量x,未赋值字段取零值
x.title = "golang" // 给x的title字段赋值
x.price = 66.6 // 给x的price字段赋值
fmt.Println(x) // 打印x的所有字段值;或者通过.取值
}
2. 作为函数参数
2.1 值传递
对大数据量的值类型(如大结构体),会拷贝整个数据、分配新内存,频繁调用可能有性能开销
2.2 指针传参
适合大值类型传参(减少拷贝)或需要修改原始变量的情况
三、方法
方法和函数类似,核心区别是方法拥有接收者,且接收者可以是任意自定义的可寻址类型(包括结构体、基本类型的名称等),但接口类型不能作为接收者(因为接口是抽象的行为集合,本身不存储数据,无法绑定方法)