一、我遇到的问题
go语言官方提供的包下载地址被国内墙屏蔽,导致go语言自动下载文件时报错,错误如下:
Error: failed to create deliver client for orderer: orderer client failed to connect to localhost:7050: failed to create new connection: connection error: desc = "transport: error while dialing: dial tcp 127.0.0.1:7050: connect: connection refused"
这里我要特别提一下,和c++/java/python这些我个人之前用过的语言不一样,go语言的import函数可以包含在互联网中的包,在程序编译的时候会自动通过go代理在网上下载依赖包,所以在go编程的时候会遇到网络访问问题。
二、解决方法
我从网上搜索到有专为中国go语言开发者准备的go中国代理,添加方法如下:
#针对go1.13.x及以上用户
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
其他版本/系统用户使用具体信息可以访问官方网站:
https://goproxy.cn/
或者gihub地址:
https://github.com/goproxy/goproxy.cn
但是我遇到了新的问题:
warning: go env -w GOPROXY=... does not override conflicting OS environment variable
大意就是系统环境变量中已经有了GOPROXY的值,go env修改不能覆盖系统变量的值,二者冲突导致go proxy设置失败
此时我通过把修改系统中的环境变量解决了这个问题
sudo gedit /etc/profile
#把下列代码写入文件末尾###########
#export GO111MODULE=on
#export GOPROXY=https://goproxy.cn,direct
##############################
source /etc/profile
选择修改/etc/profile文件的目的是它里面的内容对所有用户生效,因为我目前主要以学习,跑通程序为目的而不是生产目的,访问控制安全不那么重要。
反而由于sudo,su等命令会覆盖当前的用户变量,导致明明export了一些变量程序却还是不通的问题,所以这里一劳永逸,直接将要引入的变量导入profile文件。
另,再注明export函数只会作用于当前shell,所以需要将命令写入文件使得每次启动shell都会调用。