GOPATH

GOPATH的基本概念

在go语言中GOPATH的变量如果不设置会被默认设置为$HOME/go

我们可以通过命令查看go的环境变量

go env

因此查看GOPATH,就为

go env |grep GOPATH

如果使用GOPATH的工程结构,需要检查是否关闭了go module,否则go在编译的时候会忽略$GOPATH文件夹。

通过命令查看go module 是否关闭

go env |grep GO111MODULE

为off就说明没有开启go module

设置GOPATH

我们在使用GOPATH的工程结构时,都要对不同的项目设置GOPATH,因此到工程src所在目录执行:

export GOPATH=`pwd`

使用反引号` 将 pwd 指令括起来表示命令行替换,也就是说,使用`pwd`将获得 pwd 返回的当前目录的值

假设我们已经使用

mkdir -p src/hello

创建了一个项目,且src位于$GOPATH目录之下,并且在hello目录下已存在一个main.go文件,那么可以直接使用命令来生成可执行文件,并且可执行文件会存放到$GOPATH/bin目录下

go install hello

之后直接运行可执行文件即可。

在多项目工程中使用GOPATH的问题

可能开发人员会忘记执行

export GOPATH=`pwd`

来修改GOPATH的路径。因此全局 GOPATH的方法可能会导致当前项目错误引用了其他目录的 Go 源码文件从而造成编译输出错误的版本或编译报出一些无法理解的错误提示。

建议无论是使用命令行或者使用集成开发环境编译 Go 源码时,GOPATH跟随项目设定。在 Jetbrains 公司的 GoLand 集成开发环境(IDE)中的 GOPATH 设置分为Global GOPATHProject GOPATH

  • Global GOPATH代表全局 GOPATH,一般来源于系统环境变量。
  • Project GOPATH代表项目所使用的 GOPATH,在创建项目的时候设置,会被保存到.idea目录中,不会被设置到环境变量的 GOPATH 中,但会在编译时使用到这个目录,建议在开发时只填写项目 GOPATH,每一个项目尽量只设置一个 GOPATH。

编译运行GOPATH项目脚本

上面说了在多项目工程中,忘记修改GOPTH可能会引发错误引用其他目录的Go源码文件。一般可以通过以下脚本来编译项目,避免忘记修改GOPATH

编译/运行脚本
#!/usr/bin/env bash

CURRENT_DIR=`pwd`
OLD_GO_PATH="$GOPATH"  #例如: /usr/local/go
# 修改GOPATH为当前路径
export GOPATH="$CURRENT_DIR" 
# 创建GOBIN
GOBIN="$GOPATH/bin"

# 规范化源码格式
gofmt -w src

# 编译安装项目
go install $1
# 运行脚本
$GOBIN/$1

# 恢复
export GOPATH="$OLD_GO_PATH"

GO目前有更好的包管理方式:go mod

使用go mod首先需要做的是设置export GO111MODULE=on

go env -w GO111MODULE=on
# go v1.13之后需要额外配置
export GOPROXY=https://goproxy.cn,direct
export GOSUMDB=off

开启了GOMODULE模式后,go语言编译的时候就会忽略原来的GOPATH路径,只根据go.mod文件对项目进行编译。

一般直接创建一个目录,然后直接初始化项目即可

mkdir /hello
cd hello
go mod init hello

会生成在../hello/路径下生成一个go.mod文件

module hello

go 1.16

更多命令可以参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值