Go环境搭建与环境变量详解
Go简单介绍
Go是一种新的语言,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它具有以下特点:
- 编译速度快。
- 更加容易的依赖分析。
- Go是静态类型的语言,面向对象语言更轻量级。
- Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。
Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。
Go环境安装
Go有三种安装方式,包括 Go标准包安装(推荐这种安装方式),第三方工具安装,Go源码安装。
本文主要讲解的 Mac 安装方式: 下载安装包地址: 下载地址
然后一路默认安装点击下一步。
安装完成之后,在终端运行 go version
,如果显示类似下面的信息,表明安装成功(备注:darwin(其实就是 macOS)和 amd64 分别是操作系统和CPU架构)。
go version go1.19 darwin/amd64
Go环境变量配置
- 打开终端输入
cd ~
- 输入ls -all 命令查看是否存在
.bash_profile
- 存在使用
vi .bash_profile
打开文件(不存在则创建一个新的) - 编辑文件,添加以下代码(GOPATH主要配置工作目录,GOROOT主主要配置Go安装包位置)
export GOROOT=/usr/local/go
export GOPATH=/Users/your mac user/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
- 重新载入环境变量配置
source ~/.bash_profile
- 最终输入
go env
打印Go所有默认环境变量
注意:如果没有进行环境变量配置,Go在执行的时候找不到环境变量,此时会找默认配置,默认配置的目录在
/Users/rock/Library/Application Support/go/env"
(通过 go env GOENV
可以具体位置)
查看文件后会发现,这些环境变量值都是默认的。
GO中环境变量介绍
GOROOT
环境变量GOROOT
表示Go语言的安装目录。
此值尽量不要修改,保持默认值即可。如果乱改了,然后发现无法在控制台中使用go命令了,需要修改环境变量中的值与其保持一致。
GOPATH
环境变量GOPATH
用于指定我们的开发工作区(workspace
),是存放源代码、测试文件、库静态文件、可执行文件的工作。 这里面存放了一些
GOPATH的值不能与GOROOT相同。
在GOPATH中设置多个工作区,例如:
export GOPATH=/Users/your mac user/go/go;$home/go
GOPATH目录下的每个工作一般分为三个子目录:src,pkg,bin. 第二目录中也是需要这三个目录的。
src
:目录放的是我们开发的源代码文件,其下面对应的目录称为包.pkg
:编译后生成的文件(.a
文件)(非main
函数的文件在go install
后生成)bin
:放的是源代码编译后台的可执行文件.
GOBIN
环境变量GOBIN
表示我们开发程序编译后二进制命令的安装目录。
当我们使用go install
命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN
目录,一般我们将GOBIN
设置为GOPATH/bin
目录。
GO111MODULE
go module
是go官方自带的go依赖管理库,在1.13版本正式推荐使用。默认值为空,即go
判断开不开启module
的依据是看当前项目的根目录下有没有go.mod
文件,当然我们也可手动更改为 on
(全部开启)/ off
(全部不开启,不建议):
go env -w GO111MODULE=on
GOPROXY
GOPROXY
就是设置Golang
的全局代理。在下载依赖包的时候,一般是访问github
的仓库,国内的环境很容易被墙,所以最好设置一个速度快的代理。
Go
在此版本中GOPROXY
的默认值为https://proxy.golang.org
国内是无法访问的。因此,这里推荐使用七牛云的代理https://goproxy.cn
go env -w GOPROXY=https://goproxy.cn,direct
GOMODCACHE
即存储go下载的外部依赖模块文件的目录,默认值为$GOPATH/pkg/mod
,因此我们一般只需要更改GOPATH
的值即可,此环境变量的值就会自动做出相应的变动。当然你也可以设置为其他值。
编写代码
在 GOPATH
目录的src下创建 main.go
, 并输入代码:
package main
import "fmt"
func mian() {
fmt.Println("hello world")
}
运行代码: go run main.go
就可以看到对应的输出。
执行 go build
会将文件编译为可执行程序。
使用 Go Module
- 初始化:
go mod init [module 名称]
- 检测和清理依赖:
go mod tidy
- 安装指定包:
go get -v github.com/go-ego/gse@v0.60.0-rc4.2
- 更新依赖:
go get -u
常用的命令:
go mod init # 初始化 go.mod
go mod tidy # 更新依赖文件
go mod download # 下载依赖文件
go mod vendor # 将依赖转移至本地的 vendor 文件
go mod edit # 手动修改依赖文件
go mod graph # 打印依赖图
go mod verify # 校验依赖
Go 命令
go build
-
如果是普通包,当你执行go build之后,它不会产生任何文件。如果你需要在
$GOPATH/pkg
下生成相应的文件,那就得执行go install
。 -
如果是main包,当你执行
go build
之后,它就会在当前目录下生成一个可执行文件。如果你需要在$GOPATH/bin
下生成相应的文件,需要执行go install
,或者使用go build -o 路径/a.exe
。 -
如果某个项目文件夹下有多个文件,而你只想编译某个文件,就可在
go build
之后加上文件名,例如go build a.go
;go build
命令默认会编译当前目录下的所有go文件。 -
你也可以指定编译输出的文件名。我们可以指定
go build -o astaxie.exe
,默认情况是你的package
名(非main
包),或者是第一个源文件的文件名(main
包)。
(注:实际上,package
名在Go语言规范中指代码中package
后使用的名称,此名称可以与文件夹名不同。默认生成的可执行文件名是文件夹名。)
go build
会忽略目录下以_
或.
开头的go
文件。
参数这里就不介绍了。
go clean
这个命令是用来移除当前源码包和关联源码包里面编译生成的文件。这些文件包括
_obj/ 旧的object目录,由Makefiles遗留
_test/ 旧的test目录,由Makefiles遗留
_testmain.go 旧的gotest文件,由Makefiles遗留
test.out 旧的test记录,由Makefiles遗留
build.out 旧的test记录,由Makefiles遗留
*.[568ao] object文件,由Makefiles遗留
DIR(.exe) 由go build产生
DIR.test(.exe) 由go test -c产生
MAINFILE(.exe) 由go build MAINFILE.go产生
*.so 由 SWIG 产生
go fmt
go强制了代码格式,可以用此命令来格式化文件。
go get
这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行go install
。
go install
这个命令在内部实际上分成了两步操作:
第一步是生成结果文件(可执行文件或者.a包),
第二步会把编译好的结果移到$GOPATH/pkg
或者$GOPATH/bin
。
go test
执行这个命令,会自动读取源码目录下面名为*_test.go
的文件,生成并运行测试用的可执行文件。
go run
编译并运行Go程序