回忆map

之前我们讲过,Go语言的map是键值对的方式存储数据的,就像这样的。不记得的小伙伴请戳:一篇文章带你了解Go语言基础之map、Go语言基础之map补充。

但是这样,似乎有一个弊端,我不知道我有几个key,并且value类型是固定的。

理论来说,key Age 对应的value应该是int类型,还有一些其他微妙的问题,通过map都是不太好解决的。

因为解决这些问题,所以,又引出了结构体这个类型。


前戏补充

在开始结构体之前呢,先看两个奇怪的知识点。


自定义类型

代码

完整代码

如果要是理解的话,可以理解为NewInt包含了int的功能。

这里可以把NewInt当作int来使用。

注:NewInt是一个新的类型,它包含int,并不等于int


类型别名

代码

完整代码

自定义类型和类型别名区别

可能猛一看,感觉自定义类型和类型别名似乎一样,但是其实是不太一样的。

代码

执行结果。

Go语言基础之结构体(春日篇)-LMLPHP

结论:自定义类型真的是自定义类型,类型都变了,类型别名只是类型名变了,但是本质没变。


结构体

Go语言的结构体,相当JavaPython等语言中的类,已经不再是简简单单的结构体那么简单了。

结构体属于基本数据类型

内存图大概如下

Go语言基础之结构体(春日篇)-LMLPHP


结构体定义

定义结构体需要用到关键字typestruct

语法

示例,通过结构体描述一个学生。

注:如果字段类型是相同的,可以写在同一行。

结构体初始化

方式一,赋值时初始化

方式二,先声明,后赋值

两个执行结果。

Go语言基础之结构体(春日篇)-LMLPHP


匿名结构体

有时候我们的函数可能会要求传入一个结构体,但是你又不想定义,就想临时用一下,赶紧传参得了。

这时候可以考虑匿名结构体。

方式一,先声明,后赋值

方式二,声明+初始化

两个执行结果。

Go语言基础之结构体(春日篇)-LMLPHP


通过&方式初始化结构体

通过&的方式初始化,性能会提高一点,因为返回的是第一个的指针

但是操作过程跟上述一样,Go已经封装好了。

代码

使用&的方式基本跟原来一样,但是方式三不行。


&初始化结构体函数注意事项

如果使用&的方式,那函数参数也要变一下的。

执行结果。

Go语言基础之结构体(春日篇)-LMLPHP


关于结构体默认值

代码

执行结果。

Go语言基础之结构体(春日篇)-LMLPHP

在操作结构体时,即使没有赋值,也会有默认值,所以不用担心会报错。

int默认值是0,string默认值是"",等。

以上就是Go语言基础之结构体(春日篇)的详细内容,更多请关注Work网其它相关文章!

09-13 10:35