结构体
随写
基本使用
定义
1 | type 类型名 struct { |
别名
1 | //类型定义 |
匿名结构体
用于临时场景
1 | func main() { |
结构体匿名字段
结构体允许其成员字段在声明时没有字段名而只有类型,这种没有名字的字段就称为匿名字段。
1 | type Person struct { |
实例化
基本实例化
1 | var p1 person |
new
new创建的类型为结构体指针
1 | var p2 = new(person) |
构造函数
Go语言的结构体没有构造函数,我们可以自己实现
struct是值类型,如果结构体比较复杂的话,值拷贝性能开销会比较大,所以该构造函数返回的是结构体指针类型
1 | func newPerson(name, city string, age int8) *person { |
结构体嵌套
1 | //Address 地址结构体 |
匿名结构体嵌套
1 | type Address struct { |
结构体的“继承”
通过嵌套匿名结构体指针完成
1 | //Animal 动物 |
结构体字段的可见性
类似与公有成员和私有成员
结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)
结构体与JSON序列化
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON键值对是用来保存JS对象的一种方式,键/值对组合中的键名写在前面并用双引号””包裹,使用冒号:分隔,然后紧接着值;多个键值之间使用英文,分隔。
1 | //Student 学生 |
结构体标签(Tag)
Tag是结构体的元信息,可以在运行的时候通过反射的机制读取出来。
Tag在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下:
1 | `key1:"value1" key2:"value2"` |
结构体标签由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。键值对之间使用一个空格分隔。 注意事项: 为结构体编写Tag时,必须严格遵守键值对的规则。结构体标签的解析代码的容错能力很差,一旦格式写错,编译和运行时都不会提示任何错误,通过反射也无法正确取值。例如不要在key和value之间添加空格。
例如我们为Student结构体的每个字段定义json序列化时使用的Tag:
1 | //Student 学生 |
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !