Go语言结构体的操作 | 青训营笔记

110 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

一、本堂课重点内容

本堂课的知识要点有哪些?

  • Go语言结构体的操作

二、详细知识点介绍

本堂课介绍了哪些知识点?

Go语言结构体的操作

  1. 结构体是一种自定义类型, 使用关键字 typestruct 相配合来声明,其语法格式如下:

    type 类型名称 struct{
    	field1 type1
    	field2 type2
    	...
    	fieldN typeN
    }
    
  2. 结构体的字段或成员(成员或字段可以混用)由字段名和数据类型组成,独占一行。字段名不能重复,在同一结构体内必须唯一。

  3. 字段类型可以是Go语言基础数据类型,也可以是复合数据类型,包括结构体、数组、切片、映射、通道、函数、接口以及其它自定义类型等。

  4. 空标识符_也可以作为结构体的字段名,但该字段数据类型不能省略,且不能赋值,即使赋值也会被丢弃。

  5. 结构体的类型名和字段名也遵循Go语言的可见性原则,首字母大写是可导出的,可被别的包引用,而小写只在包内可见。

  6. 只有类型和字段同时为可导出时,包外才可见。

  7. 所谓结构体成员,就是结构体字段,一个结构体变量声明以后,就可以通过下述方式的点选择器来访问结构体成员:

    结构体变量名.字段名
    
  8. 点选择器用来引用结构体的字段,如果字段出现在赋值符左边,就是给字段赋值;如果字段出现在赋值符右边,则是参与表达式运算。使用.选择符引用的字段可以当作一般的变量使用。

  9. 将结构体的值传入函数,可以采用值传递或引用传递,不同的传递方式,程序可能有不同的执行结果。

  10. 以值传递的方式传递的是副本,如果副本在函数中被修改了,但其原值并不会改变。

  11. 引用传递因为传入函数的是地址,不是结构体字段值的副本,函数中可以通过地址直接修改原值。对于大型结构体,还是建议采用指针传递的方式,减少内存资源的消耗,提高程序运行效率。

  12. 结构体作为函数参数,传值或传指针,效果不同。传值是副本传递,要消耗大量的内存资源;传指针是地址传递,内存消耗很小。

  13. Go语言中结构体变量也是值类型的,两个类型相同的结构体变量可以相互赋值。反过来说,类型不同的两个结构体变量是不能相互赋值的。所谓类型相同的结构体变量,是指两个变量由同一个结构体类型声明。

  14. 如果两个结构体的字段名,字段的数据类型以及顺序都完全相同,只是类型名字不同,也不能视为相同类型的结构体。

  15. Go语言允许在结构体类型声明的时候对字段的意义进行注释。注释为用双引号或单反引号括起来的字符串,放在字段数据类型的后面,用空格隔开,不能使用程序注释用的双斜杠//作分隔符。

  16. 结构体字段的注释称为标签(tag),标签不影响程序的运行,但可以在程序运行过程中被反射reflect捕获

三、引用参考

我参考了哪些外部博客/笔记/文章?