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 可以查看下载状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. Go modules 创建个简单项目
    在这里插入图片描述
    在这里插入图片描述

真正用的子模块~

go sum保证当前用的库是一个完整的库,每个库的连接后面有各自的对所有文件做的hash校验码,
而go.sum中go.mod只是对这个文件做了一个hash校验码。
在这里插入图片描述

改变模块的依赖关系
在这里插入图片描述
在这里插入图片描述