美文网首页
01. Go配置

01. Go配置

作者: 哈哈大圣 | 来源:发表于2020-03-06 00:15 被阅读0次

一、环境变量配置

  1. $GOROOT: go环境变量
  2. $GOPATH: 工作目录

1). Linux环境

  1. 解压go的压缩包到喜欢的路径,比如 $HOME/app
  2. vim $HOME/.profile
export GOROOT=$HOME/app/go/
export GOPATH=$HOME/workspace/go:$HOME/other/go/
export PATH=$PATH:$GOROOT/bin:${GOPATH//://bin:}/bin

GOPATH 可以配置多个,但是 包管理默认是下载到第一个目录下,建议把$GOPATH 第一个值设置为常用的全局工作目录,例如以后安装一些Go 语言工具时,它们的bin执行文件可以在这里找到

  1. 如果向让所有用户使用
    • 将 go 安装到 /usr/local
vim /etc/profile

export GOROOT=/usr/local/go/
export GOPATH=$HOME/workspace/go/:$HOME/other/go/
export PATH=$PATH:$GOROOT/bin:${GOPATH//://bin:}/bin

2). Win环境

  1. 配置系统环境变量
GOROOT="c:\go"
  1. 将环境变量添加到PATH
;%GOROOT%\bin
  1. 检查 cmd
go version

二、GO常用命令

1). GO安装文件

  1. $GOROOT文件

    • api文件夹:存放了包含公开的变量、常量、函数等API的列表,用于Go语言API检索
    • bin文件夹:主要用于存储标准命令执行文件,例如默认的go、godoc、gofmt三件套
    • doc文件夹:存放了标准库的文档,使用godoc-http=:6060 (?) 命令可以启动文档服务,通过本地6060端口即可访问。
    • pkg文件夹:用于存放编译Go语言标准库生成的文件,这个文件夹里面的文件根据不同系统与架构会有所不同,在$GOROOT这个文件中的pkg一般只有标准库的编译缓存文件,这些文件编译 Go 程序时起到很大作用,例如 pkg/tool/linux_amd64/目录下就有很多go tool命令的执行文件
    • src文件夹:存放的是 Go 语言自己的源代码(包括标准库),阅读源码时就是看这里面的内容
  2. $GOPATH (工作空间结构)

    • bin: 存放go install生成的可执行文件
    • pkg: 存放go编译生成的文件
    • src: 开发的Go项目的源代码,不同工程项目的代码以包名区分

$GOPATH 可以有很多个,如果有两个Go 语言开发工作区,可以使用冒号分隔两个变量路径,但是第一个$GOPATH会被作为默认的go get存放目录。

2). 常用命令

  1. 格式 go command [arg]
  2. 常见command命令
command 功能
build 编译源代码包和依赖
clean 删除对象文件
doc 显示Go包或程序实体的文档
env 打印输出Go语言环境的变量信息
bug bug提交程序
fix 修复程序
fmt 格式化源码包中的代码
generate 通过扫描Go源码中的go:generate注释来识别要运行的常规命令
get 下载并安装指定的包与依赖
install 编译并安装指定的包与依赖
list 打印指定源码包的信息
run 编译并运行Go程序
test 测试一个源码包
tool 运行一个指定的go tool
version 打印输出Go环境版本
vet 检查源码包中可能出现的错误
go help [command] 查看帮助命令

3). Go语言命令行参数

  1. 源代码分类
    命令源代码文件:可执行程序的入口
    库源代码文件:集中放置各种程序实体(全局常量、全局变量、接口、结构体、函数等)
    测试源代码文件:对前两种源代码文件中的程序实体的功能和性能进行测试,或者展现前两者中程序的使用方法。

  2. 程序编译

    • go build : 尝试编译当前目录的代码包,如果只有 库源码文件测试源码文件 则不会生成文件。
    • go build hello.go: 编译指定文件
    • go install: 将可执行文件移动到 $GOPATH/bin 让其成为全局命令
    • go run hello.go: 只运行,不会输出任何结果
  3. 编译命令常用参数选项

参数选项 作用
-a 这个选项用于强制重新编译所有相关的Go语言源代码包,包括标准库中的包。默认Go语言的依赖包如果已经构建过了,第二次就不会再构建,但如果需要对底层源码做出修改,就需要使用这个选项从头编译一次。
-n 用于检查执行命令过程中实际会用到的命令,这个选项只输出要执行的命令,实际上并不会执行。
-p 构建或测试时指定并行运行的程序数量,默认值是可用的CPU数量。
-race 检查数据竞争问题,并发编程中会用到,只支持AMD 64架构。
-v 打印被编译的包。
-work 指定编译缓存工作目录,Linux 系统默认在/tmp 文件夹中。指定工作目录时,编译结束后不会自动删除缓存目录。
-x 与上面的-n类似,打印编译过程中执行的命令,但这个选项会执行这些编译命令。除了上面这些选项

--help或者go help查看帮助信息。使用go tool可以查看Go语言默认携带的一些工具

go tool [command] -h

3). Go语言包安装

  1. go get: Go自带的的包获取工具。
go get github.com/example/go-cache

执行这句命令之后,可以在$GOPATH的第一个路径的src/github.com目录中找到这个代码包的源代码。

  1. 目前go get命令所支持的VCS

    • Git
    • SVN
    • Mercurial
    • Bazaar
  2. go get [-?]:

    • -h: 显示帮助信息,
    • -d:只执行下载动作,不执行安装动作
    • -f:不检查已下载代码包的导入路径,需要与-u选项配合使用
    • -fix:下载代码包后先执行fix动作(修复代码兼容问题),然后再进行编译和安装。
    • -insecure:允许get命令使用不安全的HTTP协议下载代码包
    • -t:让get命令同时下载安装指定的代码包的测试源码文件中的依赖代码包
    • -u:更新已有代码包与依赖包。在默认情况下,get 命令不会下载本地已经存在的代码包,需要使用此选项更新代码包。
    • -v:打印要下载安装的代码包名称。
    • -x: 显示下载安装要执行的具体命令。

4). 代码格式化

  1. go fmt ?.go: 格式化工具强制格式化
  2. 格式化选项
    • -l:显示需要格式化的文件。
    • -w:不将格式化结果打印到标准输出,而是直接保存到文件中。
    • -r:添加形如<原始内容>-><替换内容>的重写规则,方便批量替换。
    • -s:简化文件中的代码。
    • -d:显示格式化前后的不同(不写入文件),默认是false。
    • -e:打印所有的语法错误。默认打印每行的前10个错误。
    • -cpuprofile:支持调试模式,将相应的cpufile写入指定的文件
      • 替换栗子
# 替换没有意义的括号
$ gofmt -r "(a) -> " -w *.go

# 去除多余的len(a)
$ gofmt -r "a[n:len(a)] -> a[n:]" -w *.go

# 调换两个参数位置a
$ gofmt -r 'A.Func1(a,b) -> A.Fun2(b,a)' -w *.go

一、语法规范

1). 常用语法规范

  1. Go语言要求只有用到的包才能导入,如果导入一个代码包又不使用,那么编译时会报错。
  2. Go语言默认不需要分号结束每行代码,如果两行代码写在一行时才需要使用分号分隔,但是不建议这样书写代码。
  3. 编译之后使用go install就可以将这个简单的Go语言程序安装到本地$PATH中,这样这个程序就可以全局使用了。

三、环境变量

  1. 显示环境变量
go evn
  1. $GOOS: 目标操作系统,目前支持10种

    • Linux、Freebsd、Darwin、Windows、Android、Dragonfly、Netbsd、Openbsd、Plan 9和Solaris
  2. $GOARCH: 目前处理器架构,目前支持9种

    • ARM、ARM64、386、AMD64、PPC64、PPC64le、MIPS64、MIPS64le 和S390X

在构建时指定上述两者就可以指定构建相应的Go语言程序。在任意环境编译任意平台的都能支持

  1. 案例:生成Win64的Go程序
# 设置当前Shell会话变量
$ GOOS=windows GOARCH=amd64 go build main.go

相关文章

网友评论

      本文标题:01. Go配置

      本文链接:https://www.haomeiwen.com/subject/pfqjrhtx.html