一、GOPATH的概念

GOPATH 是 Go 语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录(也称为工作区)

工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。

工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,

输出的二进制运行文件也不统一,这样会导致开发的标准不统一,影响开发效率。

GOPATH 适合处理大量 Go语言源码、多个包组合而成的复杂工程。

从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录,参见下表

可以通过go env命令查看Go的环境变量,我使用的mac效果如下(安装后,更改过)

二、GOPATH的使用

GOPATH目录一般为:

$HOME/go
--bin # 存放编译后的可执行文件
--pkg # 依赖包编译后的*.a文件
--src # 存放源码文件,以代码包为组织形式

如下是一个完整的Go项目的开发目录:

my-go                 // my-go为GOPATH目录
-- bin
-- myApp1 // 编译生成
-- myApp2 // 编译生成
-- myApp3 // 编译生成
-- pkg 依赖包编译后的*.a文件//
-- src
-- MyApp1 // 项目1
-- models
-- controllers
-- others
-- main.go
-- MyApp2 // 项目2
-- models
-- controllers
-- others
-- main.go

设置GOPATH后,工程中使用 import的根目录是GOPATH中的src目录

GOPATH为/Users/lxxxxxk/GolandProjects,工程为/Users/lxxxxxk/Desktop/my-go/src/MyApp1

那么MyApp1中使用import导入本地包的时候,这样写:

import "MyApp1/models"  // models为包名

也就是说,GOPATH下必须要有src目录,不然import导包的时候会找不到

import导包规则:

  1、先去GOROOT/src/路径下找      /usr/local/go/src/MyApp1 (系统环境变量 $GOROOT,即使用go env命令显示的GOROOT)

  2、如果1没有,就去Project GOPATH/src/路径下找     /Users/lxxxxxk/Desktop/my-go/src/MyApp1

  3、如果2还没找到,就去Global GOPATH路径下找     /Users/lxxxxxk/GolandProjects(系统环境变量 $GOPATH,即使用go env命令显示的GOPATH)

三、GoLand设置GOPATH

图中的 Global GOPATH 代表全局 GOPATH,一般来源于系统环境变量中的 GOPATH;

Project GOPATH 代表项目所使用的 GOPATH,该设置会被保存在工作目录的 .idea目录下,不会被设置到环境变量的 GOPATH 中,但会在编译时使用到这个目录。

建议在开发时填写项目 GOPATH,每一个项目尽量只设置一个 GOPATH,不使用多个 GOPATH 和全局的 GOPATH

否则可能会出现如下麻烦:

将某项目代码保存在 /home/davy/projectA 目录下,将该目录设置为 GOPATH。
随着开发进行,需要再次获取一份工程项目的源码,此时源码保存在 /home/davy/projectB 目录下,
如果此时需要编译 projectB 目录的项目,但开发者忘记设置 GOPATH 而直接使用命令行编译,
则当前的 GOPATH 指向的是 /home/davy/projectA 目录,而不是开发者编译时期望的 projectB 目录。
编译完成后,开发者就会将错误的工程版本发布到外网。

Go语言GOPATH是什么的更多相关文章

  1. Go语言GOPATH详解(Go语言工作目录)

    GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录. 工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面.计算机及椅子就是你的 ...

  2. macos系统下共语言gopath变量的设置

    一.问题 在macos下安装golang开发环境,想更改gopath路径,通过export GOPATH=/Volume/E/go 在vscode中通过go env命令查看GOPATH还是原始默认的, ...

  3. macbook下 go 语言的 helloworld

    go语言开发的目录 一般go语言$GOPATH 目录约定有三个子目录: src 存放源代码(比如:.go .c .h .s等) pkg 编译后生成的文件(比如:.a) bin 编译后生成的可执行文件( ...

  4. 08. Go 语言包(package)

    Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...

  5. Go第八篇之包的使用

    Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同样以包的方式进行引用,本章内容将 ...

  6. Go语言的GOPATH与工作目录详解

    这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置.应用目录结构.编译应用等内容,需要的朋友可以参考下 GOPATH设置 go 命令依赖一个重要的环境变量:$GOP ...

  7. Go语言之讲解GOROOT、GOPATH、GOBIN

    Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. go命令依赖一个重要的环境变量:$GOPATH GOPATH允许多个目录, ...

  8. 《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor

    到目前位置我们一直在编写单文件代码,只有一个 main.go 文件.本节我们要开始朝完整的项目结构迈进,需要使用 Go 语言的模块管理功能来组织很多的代码文件. 细数 Go 语言的历史发展,模块管理经 ...

  9. go语言-工作区和gopath

    工作区是放置Go源码文件的目录;一般情况下,Go源码文件都需要存放到工作区中;但是对于命令源码文件来说,这不是必须的. 每一个工作区的结构都类似下图所示:/home/hypermind/golib: ...

  10. go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径

    Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们.如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go  ...

随机推荐

  1. 这就是为什么你学不会DDD

    本文书接上回<为了给Javaer落地DDD,我们不得不写开源组件>,欢迎关注公众号(老肖想当外语大佬),获取最新文章更新和DDD框架源码,视频和直播在B站. https://mp.weix ...

  2. Infinity颜值与实用兼备的新标签页,高效书签管理必选的浏览器扩展

    浏览器是我们互联网冲浪的必备平台,但是在使用浏览器的过程中,我们经常会遇到标签页和书签管理的问题.过多的标签页和书签会导致浏览器变得杂乱无章,不利于我们快速查找需要的内容.为了提高我们的工作和学习效率 ...

  3. SMU 2024 spring 天梯赛自主训练3

    SMU 2024 spring 天梯赛自主训练3 7-1 2018我们要赢 - SMU 2024 spring 天梯赛自主训练3 (pintia.cn) 2018 wo3 men2 yao4 ying ...

  4. Vue状态管理库Pinia详解

    Pinia 是 Vue 的状态管理库,它提供了一种更简单.更不规范的 API 来管理应用的状态.Pinia 的设计哲学是简单性和易用性,它避免了 Vuex 中的许多复杂概念,如 mutations 和 ...

  5. Redmi AX6000 刷 OpenWrt

    一直想尝试玩玩软路由,但是家里实在没有软路由的需求,外加不知道该入手什么机器来刷软路由,所以迟迟没有入手.最近研究生要开学了,但是学校的有线网要下载专用软件认证才能上网,终于找到合适的理由入手一款软路 ...

  6. 【已解决】如果将MySQL数据库中的表生成PDM

    数据库表PDM关系图 |  原创作者/编辑:凯哥Java |  分类:经验分享 有时候,我们需要MySQL数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文 ...

  7. 一场 Kafka CRC 异常引发的血案

    一.问题概述 客户的生产环境突然在近期间歇式的收到了Kafka CRC的相关异常,异常内容如下 Record batch for partition skywalking-traces-0 at of ...

  8. Angular – CLI

    前言 一年半没有写 Angular 了. 现在又要开始写了. 复习过程中也顺便整理一下笔记呗. 介绍 CLI 是 Angular 的辅助工具. 输入一些 command 它会帮你 create 一些有 ...

  9. MyBatis——案例——查询-单条件查询-动态条件查询

    单条件查询-动态条件查询(choose(when,otherwise))      从多个条件中选择一个   choose(when,otherwise) 选择,类似于java中的Switch语句(w ...

  10. C语言位域的内存布局

    本文将先粗略介绍大小端,和大小端的测试方法,最后介绍位域的内存布局. 1. 大小端 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 小端模式,是指数据的高字节保存 ...