这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记
函数
-
Go 里面有三种类型的函数: 普通的带有名字的函数, 匿名函数或者lambda函数, 方法(Methods)
-
除了main()、init()函数外,其它所有类型的函数都可以有参数与返回值。 函数参数、返回值以及它们的类型被统称为函数签名。 函数重载(function overloading)指的是可以编写多个同名函数,只要它们拥有不同的形参或者 不同的返回值,在 Go 里面函数重载是不被允许的。
-
函数值(functions value)之间可以相互比较:如果它们引用的是相同的函数或者都是 nil 的 话,则认为它们是相同的函数。函数不能在其它函数里面声明(不能嵌套),不过我们可以通过使用匿 名函数来破除这个限制。
-
Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过 程中可能对副本的值进行更改,但不会影响到原来的变量,比如 Function(arg1)。 如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名 前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,比如 Function(&arg1),此 时传递给函数的是一个指针。如果传递给函数的是一个指针,指针的值(一个地址)会被复制,但指针 的值所指向的地址上的值不会被复制;我们可以通过这个指针的值来修改这个值所指向的地址上的值。
指针
-
指针的使用方法: 定义指针变量; 为指针变量赋值; 访问指针变量中指向地址的值; 在指针类型前面加上*号来获取指针所指向的内容。
-
new()和make()的区别:new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型*T的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体;它相当于 &T{}。 make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:切片、map 和 channel。
结构体
- 结构体定义的一般方式如下:
组成结构体类型的那些数据称为字段(fields)。每个字段都有一个类型和一个名字;在一个结构体 中,字段名字必须是唯一的。
结构体方法
- Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工 厂”方法。为了方便通常会为类型定义一个工厂,按惯例,工厂的名字以 new 或 New 开头。
- 说明:因为结构体中的字段是小写的,不能在别的包调用,所以通过工厂模式来解决这个问题。如果 包的 结构体变量首字母大写,引入后,直接使用, 没有问题。如果 包的 结构体变量首字母小写,引入后,不能直接使用, 可以工厂模式解决。
本人小白一枚,以上如有错误或者建议请指正。