Go语言优势
- 天生支持高并发
可以自由的去控制其并发量,也就是携程,通过go routine关键字就行了。
- 自动垃圾回收机制
- 内存的清理
- 不需要环境依赖
- 云原生无缝接入
- 社区活跃度
- 易上手
下载 Go 配置编译环境
如果要编写和阅读代码,首先要编译安装这个语言的编译环境,
如果是新环境需要创建 /Users/lulei/go/src/github.com这个目录的,在这个目录里面就可以去克隆GitHub的地址。
lulei@luleideMacBook-Pro github.com % pwd
/Users/lulei/go/src/github.com
lulei@luleideMacBook-Pro github.com % ls
astaxie cespare hashicorp mitchellh prometheus
beorn7 golang lovekeepcoding pkg shiena
配置 GOPROXY
Go默认的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。这个goproxy在使用go get安装第三方库的时候会报错,导致无法下载成功,所以必须要修改一下。
windows使用如下命令
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
linux/macos
export GO111MODULE=on
export GOPROXY=https://goproxy.io
IDE 设置(VS Code)
一些基本命令
build 从源代码构建成可执行文件
get 下载一个包
install go install从github上面下载某一个包并且安装到本地,相当于是编译安装,所以很多时候开发一个go语言项目,上传到GitHub上面,你希望别人可以使用你的项目,如果go get会将源代码下载下来,如果是go install那么会将源代码下载下来,编译完成直接安装,接下来就可以直接使用。
module awesomeProject2
go 1.16
require github.com/lovekeepcoding/testmath v0.0.0-20220225034816-3d3a22d574b6 // indirect
lulei@luleideMacBook-Pro awesomeProject2 % go get github.com/lovekeepcoding/testmath
go get: added github.com/lovekeepcoding/testmath v0.0.0-20220225034816-3d3a22d574b6
module 用来做依赖管理的
test 用来做单元测试的
Go build
lulei@luleideMacBook-Pro awesomeProject4 % go build
lulei@luleideMacBook-Pro awesomeProject4 % ls
awesomeProject4 go.mod main.go
lulei@luleideMacBook-Pro awesomeProject4 % ./awesomeProject4
3
Go test
import "testing"
func TestIncrease(t *testing.T) {
t.Log("Start testing")
increase(1, 2)
}
- go test ./… -v 运行测试
- go test命令扫描所有*_test.go为结尾的文件,惯例是将测试代码与正式代码放在同目录, 如 foo.go 的测试代码一般写在 foo_test.go
编写测试用例的时候,会将单测的代码和主代码放在一个包,这样的好处是私有函数,私有的变量都可以在单测里面被引用到。
Go vet
有些错误并不明显,这个错误并不会影响编译。但是它本身的逻辑会有一些小的瑕疵,在某些情况下可能会引发一些问题,针对这些情况,提供了上面这条命令。
它会检测出程序运行当中可能出现的问题,比如下面👇这些。
在多线程里面,哪个线程先执行,哪个线程后执行,这是不能确保的,如果主线程启动了一些子线程去运行,主线程立马退出了,很可能子线程还没有被正确的执行,就会被一起退出。