• 陈彬
    2021-10-18
    Tony老师 $go get golang.org/dl/go1.15.13 这个是不是已经不能用了,改成了: $go install golang.org/dl/go1.15.13@latest

    作者回复: 是的。如果用的是go 1.17版本,那么从go 1.17开始, go get不再承载go install功能了。写这篇稿子的时候,go 1.17还没有发布。用的是go 1.16。

    共 3 条评论
    20
  • Geek_eb6c14
    2021-10-18
    Mac环境下更改GOPROXY环境变量的终端命令行: export GOPROXY="https://goproxy.cn,direct"

    作者回复: 手动点赞!

    共 3 条评论
    11
  • 郑童文
    2021-10-21
    请问老师go env 里面的配置项究竟是存储在哪儿的? 网上有说是生成go 命令(go语言的的编译工具)时,直接包含在其中了,也有说是在一个和用户相关的配置文件夹里面,还有的说是来自系统环境变量,那这三种来源的优先级是怎么样的? 谢谢!

    作者回复: 好问题。go env的确会综合多个数据源。优先级最高的是用户级环境变量。以linux为例,你的用户下的.profile文件中的环境变量优先级最高。然后是系统级环境变量(但我们很少在linux下用系统级环境变量),最后是go自带的默认值。

    
    6
  • lesserror
    2021-10-18
    感觉Tony Bai老师的细致分享。 比较困惑我的地方是:安装多个 Go 版本的方法二和方法三。 文中说:“这个命令会将名为 go1.15.13 的可执行文件安装到 $HOME/go/bin 这个目录下”。我在Mac下,期初是没有这个文件夹的,文中说没有也没关系,我以为会自动创建。但是最终没有创建这个文件夹,也没看到可执行的安装文件。最后依然可以安装成功对应的Go版本。 关于这块,能讲讲原理就好了,看了文章,我似乎还并不明白。 文中说:“不是每次 gotip 安装都会成功,因为这毕竟是正在积极开发的版本,一次代码的提交就可能会导致 gotip 版本构建失败!” 我这里访问外网没问题,依然尝试了很多次,都是失败(fatal: unable to access 'https://go.googlesource.com/go/': Failed to connect to go.googlesource.com port 443: Operation timed out gotip: failed to clone git repository: exit status 128)。 “一次代码的提交就可能会导致 gotip 版本构建失败!” 能说说这里表达的意思吗?不是很懂。 另外,关于Go的配置的各种环境变量设置,希望后文能够结合各种go命令而产生的结果,是由哪些环境Go配置环境变量影响的,Go项目的构建,这些配置都是怎么搭配使用的,能够结合实例讲讲。我看了很多入门课程,都只是在教程开头列了这一个配置表格,后文再无提及。这样还是不能上手Go项目的开发。
    展开

    作者回复: 首先感谢你如此认真的看文章、动手实践以及提出问题。 问题1:当你的主机上没有$HOME/go/bin目录时,当执行go get/install 1.15.13版本时,go命令会自动创建$HOME/go/bin目录,并将下载的go1.15.13文件放置在该目录下。 问题2:“fatal: unable to access 'https://go.googlesource.com/go/': Failed to connect to go.googlesource.com port 443: Operation timed out gotip: failed to clone git repository: exit status 128” -- 这个问题还是与网络或git clone慢导致超时油管。 至于““一次代码的提交就可能会导致 gotip 版本构建失败!”,这个很容易理解啊。当我们通过go get方式安装go-tip版本时,go get其实也是下载go tip最新源码,然后编译这份源码。如果某个go核心开发者提交一个代码恰好导致go tip源码编译不过去,而你 下载的恰恰是这个时刻的go tip源码,那你的go tip安装自然就会因build失败而失败。 最后,你的建议很好。我会注意考虑的。

    共 3 条评论
    6
  • mikewoo
    2022-04-07
    ## 1 Ubuntu安装GO 1.8 ming@itdest:~$ wget -c https://golang.google.cn/dl/go1.18.linux-amd64.tar.gz ming@itdest:~$ sudo tar -xzvf go1.18.linux-amd64.tar.gz -C /usr/local/ ming@itdest:~$ ls /usr/local/go api bin CONTRIBUTING.md doc LICENSE PATENTS README.md src VERSION AUTHORS codereview.cfg CONTRIBUTORS lib misc pkg SECURITY.md test ## 2 配置环境变量 ming@itdest:~$ sudo vim /etc/profile ``` shell export GOROOT=/usr/local/go export GO111MODULE="on" export GOBIN=$GOROOT/bin export GOPATH=/home/ming/code/go export GOPROXY="https://goproxy.cn,direct" export PATH=$GOROOT/bin:$PATH ``` ming@itdest:~$ . /etc/profile ## 3 验证安装是否成功 ### 3.1 查看go版本信息 ming@itdest:~$ go version go version go1.18 linux/amd64 ### 3.2 查看go env配置 ming@itdest:~$ go env GO111MODULE="on" GOARCH="amd64" GOBIN="/usr/local/go/bin" GOCACHE="/home/ming/.cache/go-build" GOENV="/home/ming/.config/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/ming/code/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/ming/code/go" GOPRIVATE="" GOPROXY="https://goproxy.cn,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GOVCS="" GOVERSION="go1.18" GCCGO="gccgo" GOAMD64="v1" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/dev/null" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build2801595155=/tmp/go-build -gno-record-gcc-switches"
    展开

    作者回复: 👍

    共 2 条评论
    4
  • Geek_JcoLE
    2022-10-04 来自北京
    Mac使用brew下载后直接使用go version验证成功了,但是在网上查阅了很多资料,需要配置环境变量GOPATH和GOROOT,想问老师这种情况下还需要配置环境变量嘛?

    作者回复: 新版go都不需要配置goroot和gopath了。

    
    3
  • 唐家岭大盗
    2022-09-29 来自北京
    老师您好,如果一台机器安装了多个go版本,这些版本共用一套环境变量吗,还是说每个版本有自己的环境变量啊

    作者回复: 如果是通过系统shell设置的环境变量,那应该是共享的。 如果是通过go env -w设置的,那么要看不同版本go存储env配置的路径是否是一样,如果一样,那也是共享的。查看配置路径的方法:go env GOENV。

    
    3
  • SummerRecord
    2022-05-02
    Windows可以用winget一键安装 winget install GoLang.Go

    作者回复: 👍。这个还真没试过。

    
    3
  • rs勿忘初心
    2021-12-20
    FYI: GOPROXY: 用来配置Go Module proxy服务,其默认值为"https://proxy.golang.org,direct"。中国大陆地区,一般设置为大陆地区提供的module proxy服务以加速Go Module的获取速度,值可以设置为"https://goproxy.cn,direct" Mac更改GOPROXY环境变量的终端命令行为:export GOPROXY="https://goproxy.cn,direct"

    作者回复: 👍

    
    3
  • 宝仔
    2021-10-18
    老师多版本管理工具gvm怎么样?可以用于生产环境吗

    作者回复: 知道这个工具,但我没有用过。gvm更多是开发阶段使用的吧。无需部署到生产环境中,所以也谈不上是否可用于生产吧。如果觉得顺手,都可以在开发环境使用。

    
    3