Go学习
Go语言基础
●函数中加入err类型变量用于出错时的输出
●在参数列表时类型名称写在后面
●指针写成 *int形式
字符串操作
json.marshal
序列化成二进制,与之对应的还有反序列化json.unmarshal
time.unix
获取时间戳
strconv
.ParseInt:
.Aoti:
进程信息
Go语言实战
curlconvert.com/#go
通过这个网站将copy来的curl转换为go的对应请求代码
oktools.net/json2go
json转Go结构体
sokets5协议
net.listen()侦听端口
serve.accept()建立连接
语言进阶依赖管理
协程:用户态,轻量级
线程:内核态,重量级
wait group
go vendor
解决了依赖版本不一致问题
弊端:无法控制依赖版本
go module
go mod 命令控制管理依赖版本
依赖三要素
配置文件,依赖描述
中心仓库
本地仓库
依赖配置
语义化:major, minor. patch
commit伪版本:
go get
@ update
@ delete 删除
@ V3.0.6 语义tag
@ 6bbbdf commit
@ master 最新conmit分支
go mod
init
download
tidy 增加依赖,清楚不需要的依赖
实践测试
回归测试
集成测试
单元测试
从上到下,覆盖率增大,成本降低
单元测试规则
命名
func TestXxx(t * Test.T)
逻辑单元放在Testmain中
快速mock函数
为函数打桩
为方法打桩
gin框架实现基本逻辑
Python复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func main() {
if err :=init(filepath:"./data/"); err !=nil{
os.Exit(-1)
}
r:=gin.default()
r.GET(relative path, func(c, *gin.Context){
topicId=c.param(id)
data:=controller.QueryPageInfo(topicId)
c.json(200, data)
})
err:=r.run
if err!=nil{
return
}
}
高质量编程与编程规范
gofmt自动格式化代码
缩略词需要全部大写,但当其处于开头位置且不用提取出来则不必大写
变量距离最初使用距离越远,所需要的上下文信息也越多
recover只能用于defer中
defer是后进先出