go语言的工作空间和GOPATH环境变量介绍
作者:林佳楠 发布时间:2024-05-09 10:11:34
go语言并没有强制一定要使用一定的工作空间和项目结构,对于小型的go程序依靠go run等命令就可以直接编译运行。
然而,保持良好的工作空间和文件结构,对于管理源代码和发布程序都是非常有帮助的。
对于大型的go语言项目,工作空间则是一定要的。
1、go语言的工作空间结构
go语言的工作空间其实就是一个文件目录,目录中必须包含src、pkg、bin三个目录。
其中src目录用于存放go源代码,pkg目录用于package对象,bin目录用于存放可执行对象。
使用go的编译命令工具可以将源代码或package编译后的二进制输出对应存储到bin和pkg目录中。
src目录中的源代码根据package名分类到对应的子目录中,并且可以使用各种版本控制工具。
举个例子,go的工作空间目录结构大致如下:
bin/
hello # 可执行命令
outyet # 可执行命令
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package对象
src/
github.com/golang/example/
.git/ # Git仓库数据
hello/
hello.go # 源代码
outyet/
main.go # 源代码
main_test.go # 测试源代码
stringutil/
reverse.go # package源代码
reverse_test.go # 测试源代码
上面的工作空间中包含了一个名为example的仓库,其中包含了hello和outyet两个命令,还有一个stringutil库。
另外,一个工作空间中通常都会包含多个仓库。
2、GOPATH环境变量
GOPATH是go语言中跟工作空间相关的环境变量,这个变量指定go语言的工作空间位置。
当你建立工作空间目录后,你需要把工作空间目录的路径添加的GOPATH环境变量中。GOPATH环境变量支持多个值,如果你有多个工作空间,可以把多个工作空间值都添加到这个环境变量中,window系统使用分号";"分隔不同值,Linux或Unix系统使用冒号”:“分隔不同值。
另外,还要将所有工作空间的bin路径添加到PATH环境变量中。
在Linux系统下可以在~/.profile文件末尾添加如下内容:
$ export GOPATH=你的工作空间路径
$ export PATH=$PATH:$GOPATH/bin
当然,如果你的工作空间不止一个,PATH变量中不能直接使用$GOPATH/bin,要分别将各个工作空间中的bin路径添加进去。
需要注意的是,GOPATH环境变量的值不能与安装的go目录相同。
go目录中同样有src、pkg、bin等类似工作空间的目录结构,不过其中包含的是go的标准模块,最好不要将自己的工作空间和go目录混合,对于以后升级go版本也比较容易。
补充:go环境变量配置 (GOROOT和GOPATH)的区别和含义
GOROOT就是go的安装路径
在~/.bash_profile中添加下面语句:
GOROOT=/usr/local/go
export GOROOT
当然, 要执行go命令和go工具, 就要配置go的可执行文件的路径:
操作如下:
在~/.bash_profile中配置如下:
export $PATH:$GOROOT/bin
如果是windows需要使用;符号分割两个路径, mac和类unix都是用:符号分割
GOPATH:
go install/go get和 go的工具等会用到GOPATH环境变量.
GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工作目录, 你可以在src下创建你自己的go源文件, 然后开始工作)。
GOPATH之下主要包含三个目录: bin、pkg、src
bin目录主要存放可执行文件; pkg目录存放编译好的库文件, 主要是*.a文件; src目录下主要存放go的源文件
不要把GOPATH设置成go的安装路径,
可以自己在用户目录下面创建一个目录, 如gopath
操作如下:
cd ~
mkdir gopath
在~/.bash_profile中添加如下语句:
GOPATH=/Users/username/gopath
GOPATH可以是一个目录列表, go get下载的第三方库, 一般都会下载到列表的第一个目录里面
需要把GOPATH中的可执行目录也配置到环境变量中, 否则你自行下载的第三方go工具就无法使用了, 操作如下:
在~/bash_profile中配置,
export $PATH:$GOPATH/bin
创建一个go项目, 并且编译运行:
mkdir goproject
cd goproject
touch hello.go
在hello.go中输入:
package main
import "fmt"
func main() {
fmt.Println("Hello, GO !")
}
在项目根目录下执行go build命令来构建你的项目, 构建后会生成hello文件
运行生成的文件./hello, terminal中输出: Hello, GO !
当然你也可以直接运行命令go run hello.go来执行程序.
如果要上述设置生效,可以执行命令: source ~/.bash_profile,上述所有操作均为mac系统下的操作,如果是非mac系统,请自行变通。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/qinxiandiqi/article/details/43882667


猜你喜欢
- 本文实例讲述了js显示动态时间的方法。分享给大家供大家参考,具体如下:Date对象的方法Date 对象能够使你获得相对于国际标准时间(格林威
- python修改图像分辨率大小图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per In
- 近期,需要实现检测摄像头中指定坐标区域内的主体颜色,通过查阅大量相关的内容,最终实现代码及效果如下,具体的实现步骤在代码中都详细注释,代码还
- 模拟动态产生字母验证码图片模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 Python 提供的 Pillo
- 前言:作为测试工程师都知道,json格式的文件使我们常用的一种数据存放形式,那么对于python文件的处理,python语言有着得天独厚的条
- 阅读前:Pro Javascript Techniques翻译连载说明和目录JavaScript的演化是渐进而稳固的。历经过去十年的进程,J
- 数组中重复的数字在上一篇博客中剑指Offer之面试题3: 数组中重复的数字中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素。
- 什么是标签平滑?在PyTorch中如何去使用它?在训练深度学习模型的过程中,过拟合和概率校准(probability calibration
- 一、介绍argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.ar
- 背景在实现图片转码的需求时,需要支持最大 500 个图片下载后转换格式;如果是一个一个下载后转码,耗时太长,需要使用 goroutine 实
- Python 2.x 很快就要 失去官方支持 了,尽管如此,从 Python 2 迁移到 Python 3 却并没有想象中那么难。我在上周用
- 严格控制Session可以将不需要Session的内容(比如帮助画面,访问者区域,等等)移动到关闭Session的独立ASP应用程序中。在基
- 目录前言 字符串都有哪些操作?第一类 判断识别字符串第二类 字符串编辑的操作第三类:字符串跟字节串的互转总结前言今天我们说了字符串
- 前言用Python如何写一个接口呢,首先得要有数据,可以用我们在网站上爬的数据,在上一篇文章中写了如何用Python爬虫,有兴趣的可以看看:
- Anaconda安装安装步骤:1、官网下载安装包:https://www.anaconda.com/distribution/2、运行并选择
- 本文实例讲述了JS+php后台实现文件上传功能。分享给大家供大家参考,具体如下:一、利用 FormData 对象形式上传FormData 是
- 目录何为模式匹配下载pampy栗子单个字符匹配匹配开头和结尾匹配字典的key使用特性1: HEAD 和 TAIL特性2:甚至能匹配字典中的键
- 导语周末、假期来了,七夕也快到了,又到一年中最一票难求的时候了!那些假期想回家、过节异地恋的小可爱们,能准时抢到回家(约会对象)的城市票嘛?
- 1.sp_helpsort SELECT SERVERPROPERTY ('Collation') 查看你的排序规则. 不过
- 一、前言CRITIC权重法是一种比熵权法和标准离差法更好的客观赋权法:它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。