go环境变量配置linux,linux设置gopath
文章简介:GOPATH的环境变量的设计GOPATH的开发Go的常用命令VSCode修改后的环境变量不生效时的远程C的包管理器总结
序
过了一年,我回去工作,发现之前好的围棋环境调试不了,就重新配置了一遍。完成后的新参数之间存在一些差异,甚至有些矛盾。原来的配置参数怎么能调试成功,真的很奇怪。在配置过程中还是遇到了一些问题,请专门做好记录,防止以后出现类似问题。
Go的环境变量说到环境变量,很多都是写Java的时候配置的。一般需要配置JAVA_HOME和CLASSPATH。后来C/C写的多了,这个东西就完全不需要了。可以直接使用include引用绝对路径或相对路径,也可以使用VS的项目属性接口配置包含路径,也可以在CMakeLists.txt中编写包含路径,但是为了查找和使用各种工具和软件,通常会将它们的路径添加到环境变量path中。
go中还有两个环境变量非常重要。他们是戈鲁特和戈帕斯。其中GOROOT很好理解,就是Go软件安装的目录。可以比作JAVA_HOME/Easy冰激凌,GOPATH是一个神奇的存在。在go1.12版本之前,用go语言写的项目代码和下载的包必须在GOPATH目录下。想象一下,在一个GOPATH目录中有无数的project Go文件。感觉真的很酸。
GOPATH设计GOPATH设计有一个很好的出发点。把代码包存放在一个目录下,直接引用包名就可以了。但是,这种设计也缺乏自由度。虽然下载的第三方包和你自己的项目文件混在一起,很容易查看代码,但是结构看起来真的很乱。
什么?你说过GOPATH可以指定多个目录。的确,很多资料都说GOPATH支持多个目录,下载的包默认会放在GOPATH指定的第一个目录下。需要注意的一点是,在windows下指定多个目录需要用分号隔开,而在Linux下指定多个目录需要用冒号隔开,并且指定的目录需要是绝对路径。如果指定的目录包含相对路径,它将报告go: GOPATH条目是相对的;必须是绝对路径:.错误,切记不要在GOPATH变量的末尾添加:或;
春节前我在配置多个目录,以前调试的还不错。结果过完年,我就不再用它们了。一旦我调试,我将报告一个意外的目录布局:具体的错误内容结构如下:
意外的目录布局:导入路径:_/go/src/firstgoroot:/go/src dir:/go/src/firstgoexpanderout:/GoE xpandir:/go/src/firstgoeseparator:/参考了下面两篇文章,把GOPATH改成一个目录就好了。
Cmd/go:构建项目go时出现意外的目录布局,出现错误。意外的目录布局意味着设置export GOPATH=/home/Albert/go:/home/Albert/workspace/go可以改为export GOPATH=/home/Albert/go。
GOPATH的发展早期版本的GOPATH设计了所有的包都要下载到指定的目录,没有版本号。如果同一个包的不同版本被多个项目引用,它会停止。所以这个时候Go管理只是处于可用状态,相当于一个下载器,达不到软件包管理器的及格水平。后来出现了dep、Godep等一些包管理工具,都是官方推荐的第三方管理工具,没有一个自带Go语言。
Go的包管理工具没有Python的pip或者JS的npm那么统一,本质上是设计不同造成的。Go想做的包管理是分布式的,没有Python或者JS那样的中心仓库,这又带来了一个弊端。如果软件包提供商频繁提交新版本怎么办?因此,版本号必须存在于包管理的工作中。
关于之前的GO项目为什么要放在GOPATH下,以及GO的包管理的发展历史,请参考下面这篇文章:
为什么Go问答项目需要在GOPATH/src目录下的GO前世包中进行管理?直到go mod的出现,在go中引入第三方模块还是相当方便的。请参考《拜拜了,GOPATH君!新版本Golang的包管理入门教程》。
Go mod如何使用go mod导入其他本地项目的包?说说go.sum go常用的命令Go,作为一种语言,也代表了一系列的工具和生态环境。它的命令相当多。以下是一些常见的:
go env:打印go的环境信息go fmt:运行gofmt格式化go代码go build:编译包和依赖项go run:编译运行go程序go version:显示go程序版本go help:打印命令的帮助信息go get-u下载丢失的包,但不会更新已有的包。)其中,go help不仅打印这些命令的基本信息,还打印一些概念性的帮助信息,比如go help gopath。内容很多,下面只列举几个:
.下面是一个目录布局的例子:GOPATH=/home/user/go/home/user/go/src/Foo/bar/(包Bar中的go代码)x.go quux/(包main中的go代码)y.go Easy Ice Cream/Quux(已安装命令)PKG/Linux _ AMD64/Foo/Bar。(已安装的软件包对象).运行go env来显示当前环境,以便稍后进行比较:
$ go envgo 111 module= go arch= amd64 GOBIN= go cache=/home/Albert/。cache/go-build goenv=/home/Albert/。CONFIG/Go/env goexe= GOFLAGS= GOHOSTARCH= amd64 GOHOSTOS= Linux goin secure= GOMODCACHE=/home/Albert/WorkSpace/go1/pkg/mod Gono proxy= GONOSUMDB= GOOS= Linux gopath=/home/Albert/WorkSpace/go1 GOPRIVATE= Go proxy= https://proxy . golang . org,direct Go root=/usr/local/Go gosumdb我修改了~/中GOPATH的内容。profile文件,但在VS代码中调试时,我给出了一个错误,其性能与修改的变量没有生效是一致的。后来查了资料,发现这种情况和配置文件的加载顺序有关。详情请参考。
VSCode远程环境变量loading —— continued Remote-ssh:配置文件不来源于bashshells,仅. bashrc?# 83交互式shell、登录shell、非登录shell及其用例之间的区别是什么?实际上,linux中的shell可以分为交互shell、非交互shell、登录shell和非登录shell,每种情况下调用的初始化脚本都是不同的。涉及到/etc/profile,~/。bash _ profile ~/。bash _ login/~/。简介等。但是当VSCode远程连接Linux时,它会继承以前的环境。尝试了很多次,还是不行。这时候我得喊一声“重启解决方案真好”。重启可以解决80%的问题,剩下的20%只能重做系统才能解决。
我在这里修改了脚本内容但是没有生效,脚本之间的调用造成了死循环问题。不知道是不是因为我用了zsh shell作为默认环境,但是重启方案还是有效的,重启电脑后环境变量修改成功。
c的包经理摆弄围棋这么久,突然想到一个问题。C有包管理器吗?答案是肯定的,而且很多,但是存在这样或那样的问题。可以重点关注柯南,具体使用可以搜索官网,也可以看看下面的总结。
c包管理器柯南从零开始如何使用柯南(一)——安装应用柯南是用python开发的包管理工具,所以需要依赖Python环境。可以参考CentOS安装python3.6和在CentOS平台上安装python环境的pip步骤,虽然Centos很快就要被抛弃了。但目前在各种云服务器上仍然是主流系统。在安装Python环境的时候,需要注意循序渐进。最好不要投机取巧。我只是少安装了一个依赖项。导致我使用pip install conan命令安装conan的错误是ModuleNotFunderError:没有名为 _ ctypes 的模块。这时候就可以安装依赖项了,只需要重新编译安装conan,也就是运行yum install libffi-devel -y,make clean make make install。
1.12版本以后,Go的汇总项不必放在GOPATH中,灵活性大大提高。c也有包经理,其中柯南排名靠前。用Python编写的go get是一个go命令,常用于安装依赖包。go帮助会提供很多关于Go==防爬链接的知识。请不要点击,会原地爆炸,不负责!==有时候正确的选择比努力更重要。用战术上的勤奋来掩盖战略上的懒惰,只会感动我们,而不会带我们走向目标。会,执信任勇颜也~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。