go的环境安装没有python那么方便,多多少少踩了一些坑,所以做个记录,以供以后再次使用,或者其他有缘人参考
MacOS
- 下载地址:https://go.dev/dl/
- 选择 go1.16.11.darwin-amd64.pkg (截止2021.12.7 go1.17有问题) ,下载后点击安装(安装路径在/usr/local/go)
- vim ~/.bash_profile
GOROOT=/usr/local/go export GOROOT export GOPATH=/Users/siriusxiong/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOBIN
- 终端运行
go env -w GOPRIVATE="xxx" go env -w GONOPROXY="xxx" go env -w GONOSUMDB="xxx" go env -w GOPROXY=xxx
ubuntu18
ubuntu18 安装go的坑点
-
使用apt下载的go通常版本老旧,例如我
apt-get golang
下载的是1.10版本的,刚好1.10版本不支持go mod,1.11版本以上才支持,就很难受,所以尽量官网下载。 -
go path 等配置问题,网上有很多教程,但有的不太好用,我这里就只描述我成功的方式
安装golang
点击链接https://studygolang.com/dl上官网查看要下载的版本
例如我这里下载的go1.17.linux-amd64.tar.gz
在终端中下载和解压:
#下载
wegt https://studygolang.com/dl/golang/go1.17.linux-amd64.tar.gz
#解压
tar -zxvf go1.17.linux-amd64.tar.gz
go path 配置
-
Ubuntu保存环境变量的几个文件
- /etc/profile:在用户登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
- /etc /environment:在用户登录时,操作系统使用的第二个文件, 系统在读取用户个人的profile前,设置环境文件的环境变量。
- ~/.profile:在用户登录时,用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,会设置一些环境变量,执行用户的.bashrc文件。
- /etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
- ~/.bashrc:该文件包含专用于用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
-
我只修改的/etc/profile,注意需要sudo权限才能修改
# 修改 :~$ sudo vim /etc/profile # 增加到文件末尾 export GOROOT=/opt/go #go的安装目录 export GOTOOLS=$GOROOT/pkg/tool #go工具的安装目录 export PATH=$PATH:$GOROOT/bin:$GOPATH/bin #go path设置为bin #export GOPATH=/opt/gopath #我没有设置工作目录,因为后续会用go mod来管理go的环境 # 修改后重启系统就行了 :~$ sudo reboot # 验证 :~$ go version go version go1.17 linux/amd64 # 更改go的代理,要不然后续下载一些模块会timeout go env -w GOPROXY=https://goproxy.cn,direct
go mod 部署项目环境
以一个需要gin模块的程序为例,使用go mod来为该项目部署环境
bear@ubuntu:~/Desktop$ mkdir go_learn
bear@ubuntu:~/Desktop$ cd go_learn/
bear@ubuntu:~/Desktop/go_learn$ go mod init go_learn
go: creating new go.mod: module go_learn
bear@ubuntu:~/Desktop/go_learn$ cat go.mod
module go_learn
go 1.17
bear@ubuntu:~/Desktop/go_learn$ go build main.go
bear@ubuntu:~/Desktop/go_learn$ cat main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
bear@ubuntu:~/Desktop/go_learn$ go build main.go
main.go:4:5: no required module provides package github.com/gin-gonic/gin; to add it:
go get github.com/gin-gonic/gin
bear@ubuntu:~/Desktop/go_learn$ go get github.com/gin-gonic/gin
bear@ubuntu:~/Desktop/go_learn$ go build main.go
bear@ubuntu:~/Desktop/go_learn$ ls
go.mod go.sum main main.go
bear@ubuntu:~/Desktop/go_learn$ cat go.mod
module go_learn
go 1.17
require (
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.7.4 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/validator/v10 v10.4.1 // indirect
github.com/golang/protobuf v1.3.3 // indirect
github.com/json-iterator/go v1.1.9 // indirect
github.com/leodido/go-urn v1.2.0 // indirect
github.com/mattn/go-isatty v0.0.12 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
)
bear@ubuntu:~/Desktop/go_learn$ cat go.mod
module go_learn
go 1.17
require (
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.7.4 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/validator/v10 v10.4.1 // indirect
github.com/golang/protobuf v1.3.3 // indirect
github.com/json-iterator/go v1.1.9 // indirect
github.com/leodido/go-urn v1.2.0 // indirect
github.com/mattn/go-isatty v0.0.12 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
)
参考: