6.2 Go 匿名字段
6.2 Go 匿名字段
Golang匿名字段:可以像访问字段成员那样,访问匿名字段方法,go编译器自动查找。
package main import "fmt" type Student struct {
id int
name string
} type Teacher struct {
//匿名字段
Student
} func (s1 *Student) Play() {
fmt.Printf("Student地址:%p,值是%v\n", s1, s1)
fmt.Println("我是个学生,但是我就爱玩儿,你能奈我何")
}
func main() {
t1 := &Teacher{Student{1, "银角大王吧"}}
//两种方式一样效果
/*
t1 := &Teacher{
Student{
1,
"银角大王吧",
},
}
*/
fmt.Printf("t1的内存地址:%p\n", &t1)
//通过t1变量,执行结构体Student的方法,查找
t1.Play() // t1 -> Teacher -> *Student
}
通过匿名字段可以实现
重写 override
1.1. Go继承实战
写一个学生管理系统,学生类别有(小学生、中学生、大学生),既然是学生群体都可以(查询成绩、设置成绩)
package main import "fmt" //学生结构体
type Student struct {
Name string
Age int
Score int
} //显示学生个人信息方法,接收指针类型
func (stu *Student) ShowInfo() {
fmt.Printf("学生姓名:%v 年龄=%d 成绩=%d\n", stu.Name, stu.Age, stu.Score)
} //设置学生成绩
func (stu *Student) SetScore(score int) {
stu.Score = score
} //小学生群体 单词pupil
type Pupil struct {
//小学生的属性完全可以继承Student学生的属性
Student //继承匿名字段
} //小学生独有方法
func (p *Pupil) testing() {
fmt.Println("小学生正在考试中..")
} //大学生结构体,同样的也有学生的常见属性
type Graduate struct {
Student
} //大学生独有的方法
func (g *Graduate) testing() {
fmt.Println("大学生正在答辩考试中...")
} func main() {
p1 := &Pupil{Student{"小学生一号", 7, 99}}
p1.testing()
p1.ShowInfo()
p1.SetScore(100)
p1.ShowInfo()
fmt.Println("-----------")
g1 := &Graduate{Student{"大学生一号", 22, 50}}
g1.testing()
g1.ShowInfo()
g1.SetScore(60)
g1.ShowInfo()
}
继承给Go程序带来了代码的复用性提高了,代码的可维护性、扩展性更高了!
注意点:
如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承
如果一个struct嵌套了另一个【有名】的结构体,那么这个模式叫做组合
6.2 Go 匿名字段的更多相关文章
- 【Go入门教程4】struct类型(struct的匿名字段)
struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器.例如,我们可以创建一个自定义类型person代表一个人的实体.这个实体拥有属性:姓名和年龄.这样 ...
- go之匿名字段
struct,定义的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段. 当匿名字段是一个struct的时候,那么这个struct所拥有的全部字 ...
- sql having 函数 按匿名字段作为条件进行查询
今天写sql 遇到一个问题 SELECT a.*, count(b.id) AS nums FROM a LEFT JOIN b ON a.id=b.a_id WHERE nums>1 这时候会 ...
- 【Go入门教程6】struct类型(struct的匿名字段)
struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器.例如,我们可以创建一个自定义类型person代表一个人的实体.这个实体拥有属性:姓名和年龄.这样 ...
- go语言之进阶篇结构体指针类型匿名字段
1.结构体指针类型匿名字段 示例: package main import "fmt" type Person struct { name string //名字 sex byte ...
- go语言之进阶篇非结构体匿名字段
1.非结构体匿名字段 示例 : package main import "fmt" type mystr string //自定义类型,给一个类型改名 type Person st ...
- [GO]非结构体匿名字段
package main import ( "fmt" ) type mystr string //给一个类型重命名 type Person struct { name strin ...
- [GO]匿名字段
package main import ( "fmt" ) type Person struct { name string sex byte age int } type Stu ...
- GO学习笔记:struct的匿名字段
我们上面介绍了如何定义一个struct,定义的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段. 当匿名字段是一个struct的时候,那么这个 ...
- go结构体继承组合和匿名字段
1.结构体方法 go不是纯粹的面向对象的,在go里面函数是一等公民,但是go也有结构体实现类似java一样类的功能来提供抽象.结构体的方法分为值方法和指针方法,前者在方法中做的改变不会改变调用的实例对 ...
随机推荐
- php中&&和and有什么区别
PHP中的逻辑“与”运算有两种形式:AND 和 &&,同样“或”运算也有OR和||两种形式. 如果是单独两个表达式参加的运算,两种形式的结果完全相同,例如 $a AND $b和$a & ...
- 最新版navicat 12.1 破解(Keygen注册机)
最新注册机链接:https://pan.baidu.com/s/1fFCRkkXMzk6CFpbttCDr7w 提取码:40xo 1.下载安装Navicat 在Navicat关闭的情况下运行注册机 ...
- bootstrop日历
https://blog.csdn.net/cuixiaobo521/article/details/77880633
- 作业3-k均值算法
4. 作业: 1). 扑克牌手动演练k均值聚类过程:>30张牌,3类 2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示.(加分题) 3). 用sklearn.c ...
- Openstack Swift 如何查找 slave node 挂载的 VD 的 IP
1. 在 /etc/swift/container-server.conf 或者 object-server.conf 中的 devices= 一行 可以找到 /srv/node. 在 /srv/no ...
- UVALive 7509 Dome and Steles
三分 #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #d ...
- vue中递归组件的使用
2019独角兽企业重金招聘Python工程师标准>>> 递归 简单来讲就是程序自己调用自身. vue中的递归组件就是,组件自身调用自身. 父组件 <template> & ...
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) B. Homecoming
After a long party Petya decided to return home, but he turned out to be at the opposite end of the ...
- 《Docker从入门到跑路》之简介
什么是Docker Docker,中文翻译是"码头工人".根据官方的定义,Docker是以Docker容器为资源分割和调度的基本单元,封装了整个软件运行的环境,为开发者和系统管理员 ...
- MongoDB 部署以及操作
目录 1.MongoDB简介 2.MongoDB优势 3.MongoDB安装 3.MongoDB用户管理 3.1.Mongodb创建超级管理员 3.2.MongoDB创建读写用户 3.3.Moongo ...