本书未发布

6.1. 基础命令行

未匹配的标注

golang 地址集合

官网:golang.org

中文镜像站:golang.google.cn

在线运行环境:play.golang.org

在线文档:godoc.org

go.dev:go.dev/

github地址:github.com/golang/go

下载地址:golang.org/dl

语法描述:golang.org/ref/spec

golang Package

go一个包就是一个目录,一个目录下全部文件是在同一个包内,每个文件内的变量函数都可以相互使用,就像定义在同一个文件内容一样,包的名称就是所在目录名称。

go的main包是程序的入口,go程序会调用main.main函数,main包是一个文件即为一个包,如果目录下存在多个mian文件,多个mian文件之间相互独立、互不关联。

内部包之间可以相互访问,内部包只能被所在的包内访问,所在包外无法访问,见图:

by GO语言学习笔记-197页/雨痕
src/
 |
+-- main.go
 |
 +-- lib/                # 内部包 internal、a、b 仅能被lib、lib/x、lib/x/y 访问
      |
      +-- internal/      # 内部包之间可以相互访问
      |      |
      |      +-- a/      # 可导入外部包,比如 lib/x/y
      |      |
      |      +-- b/
      |
      +-- x/
          |
          +-- y/

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.iogoproxy.cn

doc

godoc是golang自动生成文档的工具,根据代码的注释和代码组织格式生成文档。

godoc xxxx,显示一个包的文档。

godoc -http=:80,80端口启动web文档服务,会显示goroot和gopath里面所有包的文档,相对一个本地的官网镜像服务。

godoc是一个godoc的在线运行版本,可以用来查看一些公开的包的godoc文档。

例如: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命令可以查看指定包的引用文件信息。

反馈和交流请加群组:QQ群373278915

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~