golang basic
golang 地址集合
中文镜像站:https://golang.google.cn
在线运行环境:https://play.golang.org
在线文档:https://godoc.org
go.dev:https://go.dev/
github地址:https://github.com/golang/go
语法描述:https://golang.org/ref/spec
golang Package
go一个包就是一个目录,一个目录下全部文件是在同一个包内,每个文件内的变量函数都可以相互使用,就像定义在同一个文件内容一样,包的名称就是所在目录名称。
go的main包是程序的入口,go程序会调用main.main函数,main包是一个文件即为一个包,如果目录下存在多个mian文件,多个mian文件之间相互独立、互不关联。
内部包之间可以相互访问,内部包只能被所在的包内访问,所在包外无法访问,见图:
go使用gopath为包依赖管理方案,在go1.11开始加入gomod包依赖管理,gopath与gomod两种方法互不兼容,后续说明两种包管理时均不考虑另外一种。
gopath
go存在环境变量GOATH指定多个gopath目录,在gopath目录的src目录下存在目录即为一个包,可以goenv找到默认的GOPATH然后查看里面的文件加深理解。
所有的代码均组织来GOPATH目录内,如果需要一个包,程序会在GOROOT寻找包,然后多个GOPATH依次在src下寻找包。
如果goget包初始超时等网络错误,需要配置影梭之类的软件使用代理拉包。
gomod
gomod是从go1.11开始加入的依赖管理,在目录下执行go mod init就可以初始化一个gomod包,使包不需要再GOPATH目录内。
go1.11开始加入了环境GO111MODULE
作为gomod是开关,使用值on/off/auto,auto在GOPATH为关其他位置为开,不同版本的默认值不同。
同时gomod可以配置goproxy代理。
go 常用命令
env
go env命令可以显示go的环境变量。
GOROOT指定go的安装目录,可以通过修改GOROOT和PATH两个环境变量实现go的版本切换。
GOPATH是go包的存放目录,例如gopath文件在$GOPATH/src内,gomod文件在$GOPATH/pkg/mod内;如果GOPATH有多个目录(例如:GOPATH="/root/go:/data/web/golang"
),gopath会在多个目录内依次搜寻包,但是goget的文件在第一个gpath内。
GOARCH和GOOS指定平台架构和操作系统,可以修改变量来编译其他平台下的程序,例如:CGO_ENABLED=0 GOOS=linux go build
编译linux系统的的程序;go tool dist list
命令可以显示go支持的平台。
在go version >= 1.13时可以使用go env -w xxx=xxx来保存设置环境变量。
run
go run 命令一般用来运行一个go的main文件;需要go run xxx指定mian文件运行。
注意:go run会把可执行程序编译到系统临时目录然后执行,会导致相对路径文件无法找到,使用os.Chdir()改变目录或gobuild再运行解决,可以使用fmt.Println(os.Getwd())
输出当前目录
build
go build编译代码成可执行文件,在gomod或者go1.13+中,build时会自动goget依赖。
go build 有三种main参数空、文件、包,文件就指定一个或多个mian文件编译,指定包就编译整个包里面全部的man文件,空就是相当于指定的包为当前目录。
get
go get xxx拉去一个包,可以使用-v参数显示过程,-u(update)更新一个包,会根据是否使用GO111MODULE
环境变量判断是否为gopath、gomod。
如果是gopath包存放的位置在$GOPATH/src中,如果是gomod包存放的位置在$GOPATH/pkg/mod内。
如果执行goget命令没有任何结果就是执行成功的,默认只有出现错误的时候才会显示错误,可以使用参数-v可以显示过程,如果拉包超时等失败,需要配置代理,gopath配置系统代理,gomod配置goproxy即可。
goproxy文档: goproxy.io、goproxy.cn
doc
godoc是golang自动生成文档的工具,根据代码的注释和代码组织格式生成文档。
godoc xxxx
,显示一个包的文档。
godoc -http=:80
,80端口启动web文档服务,会显示goroot和gopath里面所有包的文档,相对一个本地的官网镜像服务。
godoc是一个godoc的在线运行版本,可以用来查看一些公开的包的godoc文档。
例如:https://godoc.org/github.com/eudore/eudore就是eudore的godoc文件,uri就是包的路径。
fmt
fmt是go代码格式化工具。
例如: gofmt main.go、gofmt github.com/eudore/eudore/...
格式化一个文件或者格式化一个包及子目录。
test
go test目录可以执行gotest文件。
gotest文件名称为xxx_test.go格式,在gotest文件内,函数名称为func TestXxxx(*testing.T)
或func BenchmarkXxxx (*testing.B)
。
Test函数使用go test命令时会执行测试函数。
Benchmark函数在使用go test -bench=.命令时执行benchmakr函数,进行压力测试。
benchmack go test使用benchmark测试可以显时每个功能的消耗的时间和内存,可以用来对比性能。
pprof go test支持-cpuprofiles输出cpu文件,然后转换成pprof函数调用关系图,可以清楚看到每部消耗多少资源
cover go test -cover使用-coverprofile参数输出覆盖测试文件,然后tool转换成覆盖描述文件,可以查看那些代码没有运行测试到。
list
go list命令可以查看指定包的引用文件信息。
Last updated
Was this helpful?