go语法:build、install、汇编调试、env配置
go build和go install的区别
参考:https://www.jianshu.com/p/3db831d9b553(深入理解build和install)
1.作用
go build:用于测试编译包,在项目目录下生成可执行文件(有main包)。
go install:主要用来生成库和工具。一是编译包文件(无main包),将编译后的包文件放到 pkg 目录下($GOPATH/pkg
)。二是编译生成可执行文件(有main包),将可执行文件放到 bin 目录($GOPATH/bin
)。
2. 相同点
都能生成可执行文件
3. 不同点
- go build 不能生成包文件, go install 可以生成包文件
- go build 生成可执行文件在当前目录下, go install 生成可执行文件在bin目录下(
$GOPATH/bin
)
汇编调试
参考:
https://blog.csdn.net/u010512429/article/details/103977025(//go:解析)
https://www.cnblogs.com/softlin/p/12547393.html(内置函数)
go:解析
- //go:noescape
- //go:nosplit
- //go:linkname localname [importpath.name]
- //go:nowritebarrierrec
- //go:yeswritebarrierrec
- //go:noinline
- //go:norace
汇编代码
可以用 go tool compile -S xx.go
打印出的 Go 代码被编译成的汇编代码
内置函数
Golang是一种编译型语言,Go程序在运行前需要先通过编译器生成二进制码才能在目标机器上运行。Go的内置函数处理正是藏身于编译器当中
go env 详解
首先
这个环境变量并不是指Windows系统里的那个环境变量,而是go语言里可以让用户进行配置的一些变量。我们可以在cmd中使用go env
命令来查看所有go环境变量的当前值:
下面,我们将对重要的一些环境变量进行配置:
GO111MODULE
go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用。默认值为空,即go判断开不开启module的依据是看当前项目的根目录下有没有go.mod文件,当然我们也可手动更改为 on(全部开启)/off(全部不开启,不建议):
1
|
go env -w GO111MODULE=on |
GOPROXY
GOPROXY
就是设置Golang
的全局代理。在下载依赖包的时候,一般是访问github
的仓库,国内的环境很容易被墙,所以最好设置一个速度快的代理。Go
在此版本中GOPROXY
的默认值为https://proxy.golang.org
,国内是无法访问的。因此,这里推荐使用七牛云的代理https://goproxy.cn
:
1
|
go env -w GOPROXY=https: //goproxy .cn,direct |
GOPATH
在go 1.11版本之前,GOPATH
主要用于指定我们的开发工作区(Workspace),是存放源代码、测试文件、库静态文件、可执行文件的目录。但是自从go 1.11引入module功能之后,GOPATH
的作用就不大了。
目前在go module模式下,使用go get
下载的外部依赖模块就位于$GOPATH/pkg/mod
目录下。而因为GOPATH
的默认值为C:\Users\%UserName%\go
,所以下载的外部依赖包也就存放在C盘下面。
如果怕之后安装的依赖包太多占用C盘空间的话,我们可以更改GOPATH
到其他位置,比如设置为go的安装目录下面:
1
|
go env -w GOPATH=D:\Golang1.19\gopath |
GOMODCACHE
即存储go下载的外部依赖模块文件的目录,默认值为$GOPATH/pkg/mod
,因此我们一般只需要更改GOPATH
的值即可,此环境变量的值就会自动做出相应的变动。当然你也可以设置为其他值。
GOCACHE
此目录存放go项目在构建过程中产生的缓存,默认值为C:\Users\%UserName%\AppData\Local\go-build
,我们也可以更改为其他值,比如设置到GOPATH
目录下:
1
|
go env -w GOCACHE=D:\Golang1.19\gopath\go-build-cache |
GOENV
此目录存放go环境变量的值的配置文件,默认值为C:\Users\%UserName%\AppData\Roaming\go\env
,此值一般不需要更改,并且也不能通过go env的方式来更改此变量值。我们可以来到此目录下,发现有一个env文件,打开就可以看到文件的内容就是我们之前自定义过的go环境变量的值:
GOROOT
即go语言的安装目录,此值切记不要修改,保持默认值即可。如果乱改了,然后发现无法在控制台中使用go命令了,可以打开上一条中提到的env配置文件,删除自己自定义的值,即可恢复GOROOT
为默认值。