1.结构声明
type 结构名 struct {
//结构体
}
2.成员定义
//字段
type 结构名 struct {
[字段名1] 类型1 [字符串字面量1]
[字段名2] 类型2 [字符串字面量2]
[字段名N] 类型N [字符串字面量N]
}
//方法
func (实例名 结构名) 方法名(值形参名 类型, 切片形参名 ...类型) 返回类型 {
//方法体
}
3.继承
3.1方法继承
一个子结构可以直接继承自多个父结构,但如果多个父结构存在同名方法且子结构未覆盖,访问时会报错,此时必须使用“调用父结构的方法”章节的语法实现访问。
子结构会直接继承父结构中可继承的方法,间接继承祖父结构中可继承的方法,以此类推,直至没有可继承的方法。
注意:从父结构中继承过来的方法无需在子结构中重新声明,否则会发生覆盖。
type 子结构名 struct {
父结构名
}
3.2方法覆盖(Override)
如果从父结构中继承过来的方法在子结构中重新声明,则在子结构中重新声明的方法会覆盖从父结构中继承过来的方法。
注意:只需要方法名相同,就会发生覆盖。
注意:覆盖并不会影响父结构中原来的方法。
type A struct {}
func (a A) f() int {
return 1
}
type B struct {
A
}
func (b B) f() int {
return 2
}
func main() {
b := B{}
fmt.Println(b.f()) // 2
}
3.3调用父结构的方法
子实例名.父结构名.父方法名()
4.创建实例
4.1创建实例
//无字段
var 实例名 = 结构名{}
//有字段
//按位置方式
var 实例名 = 结构名{值1, 值2, 值N}
//按命名方式
var 实例名 = 结构名{字段名1: 值1, 字段名2: 值2, 字段名N: 值N}
4.2方法重载(Overload)
Go 语言不支持方法重载。
5.访问成员
//外部调用
实例名.字段名
实例名.方法名()
//内部调用
实例名.字段名
实例名.方法名()
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/go/golang/36915.html