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一样类的功能来提供抽象.结构体的方法分为值方法和指针方法,前者在方法中做的改变不会改变调用的实例对 ...
随机推荐
- Decision tree——决策树
基本流程 决策树是通过分次判断样本属性来进行划分样本类别的机器学习模型.每个树的结点选择一个最优属性来进行样本的分流,最终将样本类别划分出来. 决策树的关键就是分流时最优属性$a$的选择.使用所谓信息 ...
- windows 查看被占用的端口信息
如何查询 1.使用命令:netstat -aon|findstr "8080" 查询被占用的端口的进程 PID 2.使用命令:tasklist | findstr "15 ...
- 小白的MyBatis逆向工程
MyBatis逆向工程 MyBatis逆向工程,简称MBG.是一个专门为MyBatis框架使用者定制的代码生成器. 可以快速的根据数据库表生成对应的映射文件,接口,以及Bean类对象. 在Myba ...
- 痞子衡嵌入式:揭秘i.MXRT1170 eFuse空间访问可靠性的保护策略(冗余与ECC)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1170的eFuse空间访问可靠性保护策略. 关于i.MXRT系列的eFuse/OTP,痞子衡之前在介绍Boot时写过 ...
- mac OS git关联github
正在更新 mac OS 默认安装了git git -v 查看版本 mac OS 默认安装了ssh ssh -v 查看版本 1.设置username和email(github每次commit都会记录 ...
- CSS开发技巧(三):图片点击缩放
前言 利用CSS实现图片的点击缩放是一个很值得研究的效果.在某些业务需求场景中,我们可能并没有足够的空间展示过大的图片,这就需要限制图片容器的宽度和高度.然而图片限制了宽度,一些图片的细节便又无法看 ...
- 怎样借助Python爬虫给宝宝起个好名字
每个人一生中都会遇到一件事情,在事情出现之前不会关心,但是事情一旦来临就发现它极其重要,并且需要在很短的时间内做出重大决定,那就是给自己的新生宝宝起个名字.因为要在孩子出生后两周内起个名字(需要办理出 ...
- Xftp的下载安装,以及如何使用XFtp连接虚拟主机/服务器
1.下载ftp软件 下载地址: 点我立即下载 2.下载后双击安装 下一步 选择Free for Home/School 然后其他的默认下一步即可 3.打开之前领取的免费一年虚拟主机的网址,登 ...
- html之表单元素form
表单元素form \(都是嵌套input标签来实现,其中type属性选择不同则不同\) \(text:文本内容(输入内容可见)\) \(password:密码(输入内容不可见)\) \(submit: ...
- 软件工程复习 WHUT
软件过程模型: 瀑布模型:界限分明的独立阶段,计划驱动的软件过程.规范软件开发活动 (例如:可分为分析.开发.维护三个阶段) 也称生命周期模型.线性模型,采用结构化分析.设计.编程技术 不足的地方:知 ...