# Go

# Flag

Windows下可以安装MinGW-w64、MSYS2、Cygwin以调用GCC,Windows10下推荐使用WSL

插件化开发

Rust

C/C++

C语言的编译器有很多种,不同的平台下有不同的编译器

  • Windows 下常用的是微软开发的 Visual C++,它被集成在 Visual Studio 中,一般不单独使用;
  • Linux 下常用的是 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;
  • Mac 下常用的是 LLVM/Clang,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为 LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。

Visual C++(简称 MSVC)是由微软开发的,只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于 Windows 操作系统之外,主要用于 Unix/Linux 操作系统。

# 学习

# 第三方库

框架 GitHub 官网
gin https://github.com/gin-gonic/gin
https://github.com/gin-contrib
https://gin-gonic.com
echo https://github.com/labstack/echo https://echo.labstack.com
http://go-echo.org
GoFrame https://github.com/gogf/gf https://goframe.org
iris https://github.com/kataras/iris https://iris-go.com
https://studyiris.com
grbac https://github.com/storyicon/grbac
gin-jwt https://github.com/appleboy/gin-jwt
kit https://github.com/go-kit/kit https://gokit.io
Fiber https://github.com/gofiber/fiber https://gofiber.io

# 工具链

  • 测试文件中单个函数
go test -v 文件名_test.go -test.run 函数名
# 直接指定函数不指定文件运行
go test -v -test.run 函数名
关键点 说明
导入需要的包 import testing (如果你是goland,那么可以忽略,因为ide就自动帮你加上)
执行命令 go test file_test.go
测试文件命名 必须以_test.go结尾
功能测试的用力函数 必须以Test开头&&后头跟着的函数名不能以小写字母开头,比如:Testcbs 就是不行的,TestCbs就是ok的
功能测试参数 testing.T
压力测试用例函数 必须以Benchmark开头&&其后的函数名不能以小写字母开头(例子同上)
压力测试参数 testing.B
测试信息 .Log方法,默认情况下是不会显示的,只有在go test -v的时候显示
测试控制 通过Error/Errorf/FailNow/Fatal等来进行测试是否是失败,或者在失败的情况下的控制
压力测试命令 go test -test.bench file_test.go
压力测试的循环体 使用test.B.N

# Modules

命令 说明
go mod init initialize new module in current directory(在当前目录初始化mod)
go mod download download modules to local cache(下载依赖包)
go mod edit edit go.mod from tools or scripts(编辑go.mod
go mod graph print module requirement graph (打印模块依赖图)
go mod tidy add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
go mod vendor make vendored copy of dependencies(将依赖复制到vendor下)
go mod verify verify dependencies have expected content (验证依赖是否正确)
go mod why explain why packages or modules are needed(解释为什么需要依赖)
  • 查看所有可升级依赖版本 go list -u -m all

添加依赖

  • 添加依赖: go get github.com/xxx/xxx
  • 添加指定版本: go get github.com/xxx/xxx@v1.6.2
  • 添加指定版本范围: go get github.com/xxxx/xxx@'<v1.6.2'
  • 添加指定commit的版本:go get github.com/xxxx/xxx@q2516faf3

升级依赖

  • 升级Major: go get -u github.com/xxx/xxx
  • 升级全部依赖的MinorPATCH版本: go get -u
  • 升级全部依赖的PATCH版本: go get -u=patch

# Modules代理

查看Go的环境信息go env

GOPROXY

GO 1.13版本开始GOPROXY支持多代理设置,通过,隔开

  • 通用
go env -w GOPROXY=https://goproxy.io,https://goproxy.cn,direct
  • Linux
export GOPROXY=https://goproxy.io,https://goproxy.cn,direct
  • Windows
setx /m GOPROXY "https://goproxy.io,https://goproxy.cn,direct"

当第一个proxy在处理ge get所发出的HTTP请求时,返回HTTP状态码为404410时,就会查找下一个proxy

GOPRIVATE

设置GOPRIVATE来跳过私有库,比如常用的GithubGitlabGitee,中间使用,分隔

go env -w GOPRIVATE=*.github.com,*.gitlab.com,*.gitee.com

GOSUMDB

如果在运行go mod vendor时,提示Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout, 则是因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站是被墙了的,用于验证包的有效性,可以通过如下命令关闭

go env -w GOSUMDB=off

更多镜像源