结构体

63 阅读1分钟

一、定义与特性

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,属于复合类型。结构体定义需要使用 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 指针传参

适合大值类型传参(减少拷贝)或需要修改原始变量的情况

三、方法

方法和函数类似,核心区别是方法拥有接收者,且接收者可以是任意自定义的可寻址类型(包括结构体、基本类型的名称等),但接口类型不能作为接收者(因为接口是抽象的行为集合,本身不存储数据,无法绑定方法)

image.png

image.png