本文主要记录了在 Centos系统上安装Go语言运行环境,同时在VScode中配置我们的开发环境及使用中遇到的一些问题。
安装Go
首先从官网下载Golang语言开发包,这里选择编译的二进制包。
# wget https://golang.google.cn/dl/go1.15.6.linux-amd64.tar.gz
# tar -xvf go1.15.6.linux-amd64.tar.gz -C /usr/local
解压成功后会在/usr/local目录下新增一个 go 目录,然后需要配置用户环境变量。Centos系统下一般通过文件 $HOME/.bashrc 配置自定义环境变量,编辑文件内容,在文件末尾添加以下配置并source下,至此我们的Go语言开发包就安装完成了。
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
检查安装后的Go环境参数
# go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/service/.cache/go-build"
GOENV="/home/service/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/service/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/service/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build150821242=/tmp/go-build -gno-record-gcc-switches"
环境变量说明
| 变量名 | 说明 |
|---|---|
| GOROOT | 表示 Go 在电脑上的安装位置,不需要手动配置。 |
| GOBIN | 表示编译器和链接器的安装位置,默认是 $GOROOT/bin,Go 1.0.3 及以后的版本,可以将它的值设置为空,Go 会使用默认值。 |
| GOPATH | 项目存放目录,默认采用和 $GOROOT 一样的值, Go 1.1 版本开始,你必须修改为其它路径。它可以包含多个包含 Go 语言源码文件、包文件和可执行文件的路径,而这些路径下又必须分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。 |
| GOARCH | 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。 |
| GOOS | 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。 |
| GOARM | 专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。 |
| GOMAXPROCS | 用于设置应用程序可使用的处理器个数与核数。 |
工作空间(GOPATH)
默认是在$HOME/go,我们也可以通过环境变量指定。
export GOPATH=$HOME/myproject
一般来说GOPATH下面会有三个文件夹:bin、pkg、src,没有的话自己创建。每个文件夹都有其的作用。
- bin:编译后可的执行文件的存放路径,可以通过环境变量GOBIN指定
- pkg:编译包时,生成的.a文件的存放路径
- src:源码路径,一般我们的工程就创建在src下面
注意:如果要用Go Mod(Go1.11及以上支持)进行包管理,则需要在 GOPATH 以外的目录创建工程。关于Go Mod的使用,将会在下面介绍。
开始Hello world
# cd $HOME/go/src
# vim hello.go
package main
import "fmt"
func main() {
fmt.Printf("hello world\n")
}
运行hello.go
# cd $HOME/go/src
# ls
# hello.go
# go run hello.go
# hello world
#
- go run: 编译并直接运行程序,它会产生一个临时文件(但不会生成 .exe 文件),直接在命令行输出程序执行结果,方便用户调试。
- go build:用于测试编译包,主要检查是否会有编译错误,如果是一个可执行文件的源码(即是 main 包),就会直接生成一个可执行文件。
- go install:的作用有两步:第一步是编译导入的包文件,所有导入的包文件编译完才会编译主程序;第二步是将编译后生成的可执行文件放到 bin 目录下($GOPATH/bin),编译后的包文件放到 pkg 目录下($GOPATH/pkg)。
GOPATH模式开发
我们选择使用Gin框架来写一个小demo,了解GOPATH下,包是怎么组织和引用的。要安装Gin包,你需要先安装Go并设置你的Go工作区。
1.使用下面的go命令安装:
# go get -u github.com/gin-gonic/gin
我们会发现使用go get到的第三方包都保存在$GOPATH/src/下

2.在src下创建gin_example.go
# vim gin_example.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")
}
同级目录中引用import "github.com/gin-gonic/gin"
3.运行gin_example.go
go run gin_example.go

go mod模式开发
go mod是Golang1.11版本新引入的官方包管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。使用go mod开发管理项目,就不需要非得把项目放到GOPATH目录下,你可以在你磁盘的任何位置新建一个项目。
1.开启Go module并设置国内代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
注:开启go mod,代理才能生效
1.新建一个项目
# mkdir mygin
# cd mygin
go mod init mygin

目录下会新增go.mod文件
1.下载Gin框架
go get -u github.com/gin-gonic/gin
2.创建gin_example.go
# vim gin_example.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")
}
3.运行gin_example.go

4.mygin目录结构

这样一个使用go mod包管理方式创建项目的小例子就完成了。看着这个目录结构我们会思考以下问题:
问题一:依赖的包下载到哪里了?还在GOPATH里吗?
在,但是被下载到了$GOPATH/pkg/mod路径下。
问题二: 依赖包的版本是怎么控制的?
版本是在go.mod中指定的。如果,在go.mod中没有指定,go命令会自动下载代码中的依赖的最新版本
配置VScode Go 开发环境
1.安装插件
- Remote - SSH: windows下开发linux程序,需要安装。
- Go: Rich Go language support for Visual Studio Code.
2.按装Go Tools
按(ctrl + shift + p)选择(Go: Install/Update Tools)全选安装。
3.重新启动VScode
4万+

被折叠的 条评论
为什么被折叠?



