Go项目结构
go.mod
go.sum
*.go
go.mod
是相关Go包的集合,是源代码交换和版本控制的单元
其提供了module
, require
、replace
和exclude
四个命令
1 | module hello |
一个典型的go.mod示例
go.sum
是版本控制相关文件,包含了依赖的module的版本及其Hash
*.go
Go的源文件
1 | package hello |
一个典型的Go程序代码
创建Go Module的典型过程(一点点shell命令)
创建文件夹
1 | mkdir hello |
初始化Go Module
1 | go mod init example.com/hello |
单元测试
1 | go test |
显示全部依赖的包
1 | go list -m all |
添加依赖
1 | go get example.com/example |
清理依赖
1 | go mod tidy |
语法
注释
支持 C 风格的块注释 /* */ 和 C++ 风格的行注释 //
btw,顶级声明前面的注释都将作为该声明的文档注释
控制结构
if
1 | if condition { |
最简单的if结构
for
1 | // 类似 C 语言中的 for 用法 |
三种常用的方式
1 | for key, value := range oldMap { |
很方便的切片
Switch
1 | func unhex(c byte) byte { |
大概是源码里的
switch不会自动向下追溯,所以要使用逗号分隔相同处理的条件,例如:
1 | func shouldEscape(c byte) bool { |
结构体、方法与接口
结构体与方法
1 | type Student struct { |
其他零碎内容
单元测试
1 | package greetings |
一个单元测试的样例 测试文件一定要包含test字样
testing.T与testing.M
testing.T 是普通测试包
testing.M函数可以在测试函数执行之前做一些其他操作
项目结构
1 | - cmd //函数主程序 |
错误处理
1 | package greetings |
并发
协程
在函数或方法前添加 go
关键字能够在新的 Go 协程中调用它。当调用完成后, 该 Go 协程也会安静地退出。(效果有点像 Unix Shell 中的 &
符号,它能让命令在后台运行。)
1 | go list.Sort() // 同时运行 list.Sort ; 不需要等待 |