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的坑点

  1. 使用apt下载的go通常版本老旧,例如我apt-get golang下载的是1.10版本的,刚好1.10版本不支持go mod,1.11版本以上才支持,就很难受,所以尽量官网下载。

  2. 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
)

参考:

Last modification:December 7th, 2021 at 10:18 pm