Go项目的环境变量GOROOT和GOPATH的设置-那些踩过的坑

那些遇到过的问题

不知道集美们在初次运行go项目的时候会不会遇到一些奇奇怪怪的问题,反正我是遇到了(我自己太菜了)。解决这些问题经常要花半天、一天的时间,甚至是好几个月(其实是被我抛到脑后了,但是迟早要解决)。我就开始陆陆续续把问题及其解决方法整理出来,形成了该篇文章。

import "github.com/xx/xx"出问题?

can’t resolve the diectory

需要go get github.com\xx\xx,将包从github上下载下来,自动放在gopath设置的路径里面。

import"golang.org/xx/xx"出问题?

使用go get golang,org/xx/xx方法不能下下来。golang组织在github上建了一个镜像库。下载方法如下:

首先在gopath下创建好src/golang.org/x/目录。后面就是按照同样的方式进行下载了。比如golang.org/x/text,拉取该模块代码:
git clone https://github.com/golang/net.git

其他的子包下载:

$ git clone https://github.com/golang/tour.git
$ git clone https://github.com/golang/net.git
$ git clone https://github.com/golang/blog.git
$ git clone https://github.com/golang/sync.git
$ git clone https://github.com/golang/tools.git
$ git clone https://github.com/golang/lint.git
————————————————
版权声明:本文为CSDN博主「Wang123net」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cnwyt/article/details/85003720

设置GOROOT和GOPATH

先设置系统环境变量

GOROOT应为go sdk的安装目录。GOPATH可以设定为自己想要的位置,以后go项目需要的依赖库都会存放在这个路径下面
GOROOT应为go sdk的安装目录。GOPATH可以设定为自己想要的位置,以后go项目需要的依赖库都会存放在这个路径下面。

设置GOLAND中的GOROOT和GOPATH

GOROOT为go sdk的安装目录
GOROOT为go sdk的安装目录
GOPATH不用改变,自动为系统变量。
GOPATH不用改变,自动为系统变量
Go Modules(vgo)enable选项注意取消勾选或者勾选
在这里插入图片描述

用命令行编译,运行go项目,包含好几个go文件

go项目文件列表如下

go项目文件

  1. 进入go项目的目录,并运行go build,生成exe文件,结果如下
    在这里插入图片描述
    在这里插入图片描述
  2. 最后运行可执行文件即可
    在这里插入图片描述

运行内部包含多个 包的go项目

前面介绍了如何在命令行使用go命令编译和运行包含多个go文件的项目。但是实际中的项目里面往往是有多个包组成,即有一定的层级结构,划分不同的功能(我是这么理解的),有的用于配置Config包,有的用于数据模型生成data,有的用于服务service。直接用go build在项目根目录是不好使的,出错。项目的运行往往需要很多包,包括内部和外部的。这里就可以用到go mod,管理项目依赖包,很好使。

介绍go module及区分go get

go get: 若是GOPATH设置的工程目录,代码在src目录下,然后在命令提示符中输入:go get
github.com/astaxie/beego,这样就在src目录下生成了github.com/astaxie/beego包。
注意:在使用GoLand工具时,配置settings->Go->GOPATH->Project
GOPATH为当前工程目录

值得一提的是,若是想要在其他位置新建go项目,就不得不更改系统变量GOPATH,将其设为新项目的位置,可能还要改goland中的GOPATH设置。比较麻烦。外部依赖包都存放在同一个位置,没有项目私有的外部依赖包存放位置,不便于移植项目到连不上互联网的电脑上。

go mod是golang1.11后引入的package依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包管理。
之前主要是用GOPATH 和 Vendor,vendor相对主流,但现在官方更提倡go mod。[3]

go module(mod):Go 的 1.11版本以上才能使用Go Module,1.13版本以下Go Module默认关闭,首先需要设置环境变量

go env -w GOPROXY=https://goproxy.io,direct 
go env -w GO111MODULE=on set GO111MODULE=on

在GOPATH的目录下,新建项目文件夹,进入新建路径执行go mod init,在文件夹下生成go.mod文件,然后将需要引入外部包的go文件置于项目目录下,编译文件,就会把外部包下载到本地的GOPATH/pkg/mod目录下。
set GO111MODULE=off,GOPATH mode,查找vendor和GOPATH目录。
set GO111MODULE=auto,如果当前目录不在$GOPATH 并且 当前目录(或者父目录)下有go.mod文件,则使用 GO111MODULE, 否则仍旧使用 GOPATH mode。
注意:在使用GoLand工具时,不要配置Project GOPATH为当前工程目录,最好不要配置Project GOPATH,而是配置Module GOPATH [2]
在使用模块的时候, GOPATH 是无意义的,不过它还是会把下载的依赖储存在 GOPATH/src/mod 中,也会把 go install 的结果放在 GOPATH/bin(如果 GOBIN 不存在的话)

相关命令[3]

1、指定module根目录并生成go.mod文件

go mod init example.com/hello

2、下载并添加依赖到go.mod文件中

go build src/service
go test src/sevice

3、查看module下的所有依赖

go list -m all

4、更新稳定版依赖

go get rsc.io/sampler

5、更新为指定版本依赖

go list -m -versions rsc.io/sampler
 
rsc.io/sampler v1.0.0 v1.2.0 v1.2.1 v1.3.0 v1.3.1 v1.99.99
 
go get rsc.io/sampler@v1.3.1

6、清理无用的依赖

go mod tidy

7、将依赖复制到项目路径的vendor文件夹中

go mod vendor

8、忽略cache里的包,只使用vendor目录里的依赖进行编译

go build -mod=vendor

9、校验依赖并查看是否有修改

go mod verify

GoLand go module 配置

使用go module,依赖包存放于GOPATH下

优先级:global path < project path < module path
勾选enable module选项
在这里插入图片描述
保持不变
在这里插入图片描述

使用vendor

注意要使用命令行,并勾选vendor
在这里插入图片描述

type *http.Server has no field or method ProxyRemoteAddr

是下载好依赖后,编译时老是出现上诉问题,说外部依赖包里面有相关变量或方法没定义。明明是网上下载的依赖包,自己又没有修改,怎么会出现编译通不过的问题?
对于https://github.com/csby/wsf来说就是这样,出现问题
后面发现在它的readme.md文件中已经有说明:
在这里插入图片描述
提示我们对源代码作出以下修改。
按照它的提示修改后,编译通过。go项目成功跑起来。
发现这些花了我一天多的时间。

命令行运行项目

项目结构
srv(config()、data()、 enum()、 handler()、 service()、go.mod)

  1. 为项目添加go.mod文件
go mod init srv
  1. 往go.mod里面添加各个组件的依赖包
go build srv/config
go build srv/data
go build srv/enum
go build srv/service
go run srv/servive

参考文献:

  1. https://blog.csdn.net/cnwyt/article/details/85003720
  2. https://blog.csdn.net/guoguolifang/article/details/88963042
  3. https://blog.csdn.net/zzhongcy/article/details/97243826
  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GOROOTGolang的安装目录,需要将其设置环境变量。可以通过以下方式设置GOROOT环境变量:export GOROOT=/usr/local/go。这样在命令行中使用go命令时,系统就知道去GOROOT目录下寻找相应的可执行文件。 [1] GOPATHGolang项目的工作目录,需要将其设置环境变量。可以通过以下方式设置GOPATH环境变量:export GOPATH=/home/go。GOPATH可以有多个路径,可以通过设置PATH变量来添加所有的bin目录,例如export PATH=$GOPATH/bin:$PATH。在Goland中,也可以通过设置Project GOPATH来指定Golang项目的工作目录。 [2 [3 请注意,设置环境变量后,需要重启命令行工具才能生效。可以使用go env命令来查看GOROOT和GOPATH环境变量设置情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [GOROOT 和 GOPATH 的区别](https://blog.csdn.net/change_any_time/article/details/124975238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【GO】详解GOROOT和GOPATH](https://blog.csdn.net/fangkang7/article/details/104764507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Golang环境windows 设置 GOROOT 和 GOPATH](https://blog.csdn.net/qq_43407759/article/details/120525967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值