GO入门学习遇到的一些小贴士,给自己当note
学习资料:https://www.liwenzhou.com/posts/Go/go_menu/
Snipples
VS CODE中使用快捷操作,如下
1 | { |
字符串花操及变量
1 | package main |
for range(键值循环)
1 | package main |
reflect.TypeOf 获取类型
1 | package main |
if else :tips
Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行
switch
1 | package main |
九九乘法表
1 | package main |
数组是值类型
1 | package main |
切片
1 | package main |
map
1 | package main |
函数:可变参数
1 | package main |
defer:延迟执行
看一下结果与上面有何不同便知
在Go语言的函数中return
语句在底层并不是原子操作,它分为给返回值赋值和RET指令两步。而defer
语句执行的时机就在返回值赋值操作后,RET指令执行前
处理资源释放或者时间问题
1 | package main |
局部变量
如果局部变量和全局变量重名,优先访问局部变量
定义函数类型:type
就像定义变量一样,将一类函数都定义为同一种
1 | package main |
匿名函数
有点鸡肋,目前不知道适合什么场景,只能说便于快速执行,闭包里很好用
匿名函数就是没有函数名的函数
闭包
1 | package main |
panic/recover
recover()
必须搭配defer
使用。defer
一定要在可能引发panic
的语句之前定义
1 | package main |
指针:一定要初始化(new/make)
在Go语言中对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间,否则我们的值就没办法存储。而对于值类型的声明不需要分配内存空间,是因为它们在声明的时候已经默认分配好了内存空间。要分配内存,就引出new和make
make函数是无可替代的,我们在使用slice、map以及channel的时候,都需要使用make进行初始化,然后才可以对它们进行操作
make也是用于内存分配的,区别于new,它只用于slice、map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了
自定义类型与类型别名
1 | //类型定义 |
结构体
构造函数
Go语言的结构体没有构造函数,我们可以自己实现。 例如,下方的代码就实现了一个person
的构造函数。 因为struct
是值类型,如果结构体比较复杂的话,值拷贝性能开销会比较大,所以该构造函数返回的是结构体指针类型
1 | func newPerson(name, city string, age int8) *person { |
方法和接收者
定义如下
1 | func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) { |
- 接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名称首字母的小写,而不是
self
、this
之类的命名。例如,Person
类型的接收者变量应该命名为p
,Connector
类型的接收者变量应该命名为c
等。 - 接收者类型:接收者类型和参数类似,可以是指针类型和非指针类型。
- 方法名、参数列表、返回参数:具体格式与函数定义相同。
当方法作用于值类型
接收者时,Go语言会在代码运行时将接收者的值复制一份。在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本,无法修改接收者变量本身
什么时候应该使用指针类型
接收者呢?
- 需要修改接收者中的值
- 接收者是拷贝代价比较大的大对象
- 保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者
1 | package main |
嵌套结构体
1 | //Address 地址结构体 |
结构体的“继承”
1 | package main |
结构体字段的可见性
真的很方便,没有private,public这些花里胡哨的
结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)
结构体与JSON序列化
这么多后端语言,瞧把大家逼疯了,统一出了一个json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON键值对是用来保存JS对象的一种方式,键/值对组合中的键名写在前面并用双引号""
包裹,使用冒号:
分隔,然后紧接着值;多个键值之间使用英文,
分隔
1 | package main |
final(小结)
1 | package main |
本文链接: http://woaixiaoyuyu.github.io/2020/02/25/GO-note/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!