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环境变量配置

  1. 打开终端输入cd ~
  2. 输入ls -all 命令查看是否存在 .bash_profile
  3. 存在使用vi .bash_profile打开文件(不存在则创建一个新的)
  4. 编辑文件,添加以下代码(GOPATH主要配置工作目录,GOROOT主主要配置Go安装包位置)
export GOROOT=/usr/local/go
export GOPATH=/Users/your mac user/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
  1. 重新载入环境变量配置 source ~/.bash_profile
  2. 最终输入 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.gogo 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程序

关于我
loading
上一篇: