golang基础学习
1. Public & private
golang中方法和属性名(包含结构体中的属性)区分是私有属性||方法的办法是看首字母是否大小写,大写相当于public(可跨包使用) 小写相当于private(只在本包内可用)
2. const
Const 常量(常用于枚举…)是只读属性 ,const中添加关键字iota,每行iota都会累计加1,第一行iota的默认值是0 ;【注:iota 只能出现在 const() 中,只能在 const() 中进行累加】
3. go中函数的多返回值的三种写法
4. Import包 & init 函数(被优先调用)
上面结果可以看出import包 的 init 函数会被优先调用
5. Slice 切片
6. Map
7. Struct 基本定义与使用
(简单理解:将多种基本数据类型组合在一起构造一个复杂的新的数据类型来用)
8. 基于struct,面向对象基础
改进:
此时就可以调用set成功~
9. go中面向对象的继承
10. 面向对象 多态 的简单实现
struct对象继承一个接口的话,需要实现接口中的全部方法
11. 空接口 万能类型,与类型断言机制
12. 反射 (pair 对)
13. 反射(reflect包方法)
14. 反射 解析结构体的tag
15. 结构体标签在json中的应用
结构体–》json marshal()
Json --》 结构体 unmarshal()
16. Goroutine 原理
复用线程:
G1若还要继续执行重新加入队列,不执行就干掉了
利用并行 机制:
抢占:
全局队列:
见上面 stealing 和 hand off 两个展示图
17. Goroutine 创建
匿名函数来实现:
在go 子协程中退出协程:
1、只退出里面的那个函数:
两个函数都退出协程:
调用有形参的协程:
18. Channel 保证go 协程之间的通信
不能获取到go 协程的返回值,因此不能用返回值的方式来进行main 协程与go 协程之间的通信
channel:
从结果看,main 协程总在匿名go协程后结束,因为channel有一定的协程 间 协调能力(互相阻塞唤醒)
19. channel有缓冲与无缓冲同步问题
若发送到channel buffer中的个数大于 capital 则会发生阻塞 过会儿go 子协程exit,如下,
同理:
20. 关闭channel & range
总结:
利用 range:
21. channel与select
Select 具备多路channel的监控状态功能
22. defer()学习
结果: 30 、 20 、10 、30
23. Go modules
若更改go path MAC需要在./~bashrc 中export
go env 查看go的所有环境变量
-u 可以查看下载状态
- Go modules 创建个简单项目
真正用的子模块~
go sum保证当前用的库是一个完整的库,每个库的连接后面有各自的对所有文件做的hash校验码,
而go.sum中go.mod只是对这个文件做了一个hash校验码。
改变模块的依赖关系