「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」
结构体
结构体是将零个或多个任意类型的命名变量组合在一起的聚合数据类型。每个变量都叫做结构体的成员。
1 | go复制代码type Employee struct { |
Employee
就是一个结构体。
定义结构体时要注意
1.如果一个成员变量的首字母大写,则它是可导出的。
2.成员变量的顺序对于结构体的同一性很重要,顺序不同表示不同的结构体。
3.结构体中的成员变量类型不能是结构体本身,但可以是该结构体的指针类型
1 | go复制代码type Node struct { |
4.结构体的零值由结构体成员的零值构成。
结构体变量的声明
1 | go复制代码type Point struct { |
方式一和方式二不可以混用。并且不能通过方式一绕过不可导出变量无法在其他包中使用的规则
。
1 | go复制代码// p.go |
如果在函数中需要修改结构体变量的内容时,需要传递指针
1 | go复制代码type Point struct { |
结构体的比较
必须所有的成员变量是可比较的,那这个结构体是可变比较
1 | go复制代码type Point struct { |
结构体嵌套和匿名成员
结构体嵌套的目的是为了复用
Go允许我们定义不带名称的结构体成员(即匿名成员),这样可以快捷访问到匿名成员里的成员变量
1 | go复制代码type Point struct { |
外围的结构体Wheel
不仅获得匿名成员Circle
的内部成员变量,也会获得Circle
的方法
1 | go复制代码type Point struct { |
如果在Wheel
上再加一个匿名命名成员Band
, 它也有Print
方法
1 | go复制代码type Band struct { |
如果外围结构体Wheel
有Print
方法,会直接调用该方法;如果没有,但其内部的多个匿名成员都有该方法,需要显示指定调用哪个匿名结构体的Print
方法
本文转载自: 掘金