一 匿名字段、同名字段

1 匿名字段的作用及其初始化

  • 1)go中的匿名字段就是只有类型,没有名字。
  • 2)匿名字段的作用:因为go没有封装、继承、多态的概念,但是go也是可以面向对象编程,因为有匿名字段。例如下面,Student通过匿名字段继承了Persion的所有成员。

实际上学过C的都知道,就是一个简单的结构体嵌套而已,只不过在go叫得高大尚了。

type Persion struct {name stringsex byteage int
}// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {Persion    // 匿名字段,只有类型,没有名字。它继承了Persion的所有成员id intaddr string
}
  • 3)匿名字段的初始化
package mainimport "fmt"type Persion struct {name stringsex byteage int
}// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {Persion    // 匿名字段,只有类型,没有名字。它继承了Persion的所有成员id intaddr string
}func main(){// 1. 顺序初始化var s1 Student = Student{Persion{"hh", 'w',24}, 1, "sz"}fmt.Println("s1 = ", s1)// 2. 自动推导类型s2 := Student{Persion{"cc", 'w',24}, 2, "sz"}fmt.Printf("s2 = %+v\n", s2)// %+v表示显示更详细// 3. 指定成员初始化s3 := Student{id:1}fmt.Printf("s3 = %+v\n", s3)// 这里指定成员赋值时,每个值前面必须手动添加对应的字段名,否则报mixture of field:value and value initializerss4 := Student{Persion: Persion{name: "ll", sex: 'w'}, id: 1}//s4 := Student{Persion{"cc", 'w'}, 2}// err:mixture of field:value and value initializersfmt.Printf("s4 = %+v\n", s4)// 4. 使用成员操作来指定成员初始化var s5 Students5.Persion.name = "qq"   // 此时写成s5.name是一样的s5.name = "mm"s5.age = 24s5.id = 1fmt.Printf("s5 = %+v\n", s5)
}

结果:

2 同名字段

1)同名字段就是在匿名字段中有一个成员,而匿名字段外也有一个同样名字的成员。

type Persion struct {name stringsex byteage int
}// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {Persion    // 匿名字段,只有类型,没有名字。它继承了Persion的所有成员id intaddr stringname string // 同名字段,因为Persion里面也有一个name。编译器依照就近原则去操作,即本成员优先级高。
}
  • 2)当存在同名字段时,编译器会按照就近原则去搜索。如果在本作用域找到,则直接使用,没有则去继承的结构体中找。
package mainimport "fmt"type Persion struct {name stringsex byteage int
}// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {Persion    // 匿名字段,只有类型,没有名字。它继承了Persion的所有成员id intaddr stringname string // 同名字段,因为Persion里面也有一个name。编译器依照就近原则去操作,即本成员优先级高。
}func main(){var s1 Students1.name = "hh"                // 操作的是Student的name,而不是Persion的names1.id = 1s1.addr = "sz"s1.Persion.name = "perName" // 需要显示操作才行s1.Persion.age = 22s1.Persion.sex = 'w'      // ascii码值打印字符类型fmt.Printf("s1 = %+v\n", s1)
}

3 非结构体类型匿名字段

  • 1)实际上非结构体类型匿名字段和第1点讲到的匿名字段是一样的,只不过这些类型不是结构体,一般是基本数据类型,例如int、short这些。
    这里只是为了让大家加深印象。
package mainimport "fmt"type Persion struct {name stringsex byteage int
}// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {Persion    // 匿名字段,只有类型,没有名字。它继承了Persion的所有成员int// string // 不能有同类型的匿名字段,会报错error: duplicate field stringstring // 同名字段,因为Persion里面也有一个name。编译器依照就近原则去操作,即本成员优先级高。
}func main(){var s1 Students1 = Student{Persion{"h", 'w', 24}, 111, "hhh"}fmt.Println("s1 = ", s1)
}

4 结构体指针匿名字段

  • 1)同理,结构体指针匿名字段和第1点讲的一样,这里只是让大家加深印象,指定怎么用。
package mainimport "fmt"type Persion struct {name stringsex byteage int
}// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {*Persion   // 匿名字段,只有类型,没有名字。它继承了Persion的所有成员id intaddr string
}func main(){// 1. 不使用new的方式s1 := Student{&Persion{"hh", 'w', 24}, 1, "sz"}fmt.Println(s1.name, s1.sex, s1.age, s1.id, s1.addr)// 2. 使用new的方式var s2 Students2.Persion = new(Persion)s2.name = "cc"s2.sex = 'w's2.age = 24s2.id= 1s2.addr = "sz"fmt.Println(s2.name, s2.sex, s2.age, s2.id, s2.addr)
}

go语言基础-----06-----匿名字段、同名字段相关推荐

  1. Python程序设计语言基础06(完):组合数据类型

    目录 1. 组合数据类型概述 2. 集合类型及操作 2.1 集合类型定义 2.1.1 集合类型概念 2.1.2 集合类型定义 2.2 集合操作符 2.3 集合处理方法 2.4 集合类型应用场景 2. ...

  2. go语言基础之不同作用域同名变量

    1.不同作用域同名变量 示例: package mainimport "fmt"var a byte //全局变量func main() {var a int //局部变量//1. ...

  3. Rust 中的基本数据类型——Rust语言基础06

    文章目录 1. 前言 2. 标量类型(Scalar) 2.1. 整型(Integer) 2.2. Rust 的整数形式 2.3. 奇怪的问题(整数的溢出) 2.4. 浮点类型(Float) 2.5. ...

  4. 博森科技-CCG机器人基础名词解释(列表字段)

    基础名词解释(列表字段) 一.监控状态 注意: 1.未勾选[开启监控]时,[只卖不买].[止盈停止]的勾选状态将无效: 2.同时勾选[开启监控].[只卖不买].[止盈停止]时,机器人则只执行[只卖不买 ...

  5. 接口测试平台插播: 同名字段请求体-其他涉及代码

    我们上节课,成功的把单接口调试的底层请求代码中form-data等格式的请求体从字典转变为了多元元组,实现了同名字段的正常请求.本节就来搞定首页请求/用例请求/异常测试/登陆态的底层代码. 首先是异常 ...

  6. ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询

    ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询 属性 字段的添加.删除和查找 IFeatureLayer GetLayerByName(string name) {ILaye ...

  7. 第3章 Kotlin语言基础 《Kotlin 极简教程》

    2019独角兽企业重金招聘Python工程师标准>>> 第3章 Kotlin语言基础 掌握基础,持续练习 学习任何东西,都是一个由表及里的过程.学习一门编程语言也一样.对于一门编程语 ...

  8. 【java后端学习】java语言基础(夯实基础)

    文章目录 一.基础语法 1 java中的标识符 1.1 变量命名规范 1.2 保留字 2 java中的常量 3 java基本数据类型 4 数组 5 字符及字符串 6 运算符 7 控制语句 for语句 ...

  9. go语言基础精修(尚硅谷笔记)

    一.Golang的学习方向 1.1 Go的学习方向 Go语言,可以简单写成Golang(lang是language) 区块链研发工程师 Go服务器端/游戏软件工程师 Golang分布式/云计算软件工程 ...

最新文章

  1. 2022-2028年中国氢化环氧树脂产业发展动态及投资趋势预测报告
  2. 转 LIST INCARNATION OF DATABASE
  3. js layui 模板属性 添加_layui.laytpl--模板引擎文档
  4. 【Python进阶】实战Python图形文件操作基本编程
  5. selenide小白教程
  6. 20万DBA在关注的11个问题
  7. 接口测试-使用mock生产随机数据
  8. ofo 回应假装老外秒退押金;董明珠雷军十亿赌约到期;高通苹果摩擦再升级 | 极客头条...
  9. shell编程基础(二)
  10. 终于有了MSDN上的Blog
  11. linux系统开启ssh端口号
  12. 算法训练 完数 C语言
  13. CVPR 2021 论文解读Vol.10 | 通用实例蒸馏GID:青出于蓝而胜于蓝
  14. 仿热血江湖游戏NpcClass_群攻查找范围Npc2
  15. 功能测试是什么?性能测试是什么?两者有什么区别?
  16. eclipse juno(4.2) 集成 maven 插件
  17. YOLO如何训练分类网络???
  18. 28法则在建站、优化、运维中的体现
  19. 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序
  20. P2657 [SCOI2009] windy 数(数位DP)

热门文章

  1. JKNetworking完整文档
  2. OMRON CJ系列CJ1W-EIP21通过网关设备 EtherNetIP转RS232/485与Modbus Slave软件测试记录文档
  3. 如何将思科路由器恢复到出厂默认设置?
  4. sqlserver清除换行符和回车符\r\n
  5. logo免费在线设计,做自己品牌的设计师
  6. mysql utl_file_利用UTL_FILE包实现文件I/O操作
  7. 《只是为了好玩:Linux之父林纳斯自传》读后感
  8. PyQt5_pyqtgraph股票RSI指标
  9. 传说中的“群控”!云控群控、线控群控到底是什么?
  10. Aspose.word组件介绍