Go语言 | 01 WSL + VSCode环境搭建避坑指南
Posted “逛丢一只鞋”
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言 | 01 WSL + VSCode环境搭建避坑指南相关的知识,希望对你有一定的参考价值。
文章目录
前言
因为工作原因,需要使用Go语言进行开发,作为一个嵌入式开发人员,兵来将挡水来土掩
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
Go安装包下载安装
https://studygolang.com/dl
开发环境为WSL,所以直接选择Linux版本下载
下载后找个位置解压文件
执行解压指令
tar zxvf go1.18.3.linux-amd64.tar.gz
把解压后的go文件夹复制到home目录下,也可以自己定义,不过要记得自己的的这个目录
开始配置环境
Linux下又两个文件可以配置,其中/etc/profile
是针对所有用户都有效的;$HOME/.profile
是针对当前用户有效的,可以根据自己的情况选择。
针对所有用户的需要重启电脑才可以生效;针对当前用户的,在终端里使用source
命令加载这个$HOME/.profile
即可生效。
建议在同一目录下建立go语言工作环境文件夹,我这里新建了一个gopath文件夹,路径为/home/gopath。
sudo nano /etc/profile
然后在打开的文件末尾添加:
export GOROOT=/home/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY="https://goproxy.io"
其中GOROOT环境变量表示我们GO的安装目录,这样其他软件比如我们使用的Go开发IDE就可以自动的找到我们的Go安装目录,达到自动配置Go SDK的目的。
第三句export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
配置是把/home/go/bin这个目录加入到环境变量PATH里,这样我可以在终端里直接输入go等常用命令使用了,而不用再加上/home/go/bin这一串绝对路径,更简洁方便。
再然后刷新文档
source /etc/profile
这里的环境是全局的
以上配置好之后,我们打开终端,属于如下命令,就可以看到go的版本等信息了。
go version
GOPATH目录
自动Golang采用Module的方式管理项目后,GOPATH目录已经不是那么重要了,目前主要用来存放依赖的Module库,生成的可执行文件等。
GOPATH环境变量的配置参考上面的安装Go,配置到/etc/profile
或者Windows下的系统变量里。
这个目录我们可以根据自己的设置指定,比如我的Mac在$HOME/code/go下,Window的可以放到d:\\code\\go下等。该目录下有3个子目录,他们分别是:
.
├── bin
├── pkg
└── src
- bin文件夹存放go install命名生成的可执行文件,可以把
$GOPATH/bin
路径加入到PATH环境变量里,就和我们上面配置的$GOROOT/bin
一样,这样就可以直接在终端里使用我们go开发生成的程序了。 - pkg文件夹是存在go编译生成的文件。
- src存放的是非Go Module项目源代码
go项目工程结构
配置好工作环境后,就可以编码开发了,在这之前,我们看下go的通用项目结构,这里的结构主要是源代码相应地资源文件存放目录结构。
基于Go Module,你可以在任意位置创建一个Go项目,而不再像以前一样局限在$GOPATH/src
目录下。假设我要创建一个tour项目,它位于~/Desktop/tour
目录下,那我现在打开终端,CD到~/Desktop/tour
目录下,输入如下命令即可创建一个Go Module
工程。
➜ tour go mod init flysnow.org/tour
go: creating new go.mod: module flysnow.org/tour
当前生成的Go Module
工程只有一个go.mod
文件,它的内容如下所示:
module flysnow.org/tour
1.16
其中module flysnow.org/tour
代表该项目的path,也就是最顶层的package,1.16表示该项目需要1.16版本及其以上才能编译运行。
go.mod文件是Go语言工具链用于管理Go语言项目的一个配置文件,我们不用手动修改它,Go语言的工具链会帮我们自动更新,比如当我们的项目添加一个新的第三方库的时候。
使用第三方库,也就是使用第三方库里的包,那么我们如何引用一个包呢,使用的就是go语言的import关键字,比如:
import (
"github.com/gohugoio/hugo/commands"
)
以上引入的github.com/gohugoio/hugo/commands
这个包是属于 github.com/gohugoio/hugo/
这个Go Module的。
所以相应的,我们也可以在我们自己的Go Module工程里创建一些包(其实就是子目录),比如我创建了lib1目录,那么它的对应的包就是flysnow.org/tour/lib1
,其他包只有通过这个包名才能使用flysnow.org/tour/lib1
包中的函数方法等。
.
├── go.mod
├── lib1
├── lib2
└── main.go
所以最后你的项目目录类似上面的结构,每个子目录都是一个包,子目录里可以放go文件。
Hello World
这里准备了一个示例代码
保存为 .go 格式的文件
package main
import "fmt"
func main()
fmt.Printf("hello, world\\n")
执行
go run test.go
可以看到
表示Go下载和安装成功,但是我们肯定不能止步于此,要让开发变得人性化,需要借用VSCode
安装程序
go install 命令的功能和前面一节《go build命令》中介绍的 go build 命令类似,附加参数绝大多数都可以与 go build 通用。go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下。
这个命令在内部实际上分成了两步操作:第一步是生成结果文件(可执行文件或者 .a 包),第二步会把编译好的结果移到 $GOPATH/pkg 或者 $GOPATH/bin。
本小节需要用到的代码位置是./src/chapter11/goinstall。
本套教程所有源码下载地址:https://pan.baidu.com/s/1ORFVTOLEYYqDhRzeq0zIiQ 提取密码:hfyf
使用 go install 来执行代码,参考下面的 shell:
$ export GOPATH=/home/davy/golangbook/code
$ go install chapter11/goinstall
编译完成后的目录结构如下:
.
├── bin
│ └── goinstall
├── pkg
│ └── linux_amd64
│ └── chapter11
│ └── goinstall
│ └── mypkg.a
└── src
└── chapter11
├── gobuild
│ ├── lib.go
│ └── main.go
└── goinstall
├── main.go
└── mypkg
└── mypkg.go
go install 的编译过程有如下规律:
- go install 是建立在 GOPATH 上的,无法在独立的目录里使用 go install。
- GOPATH 下的 bin 目录放置的是使用 go install 生成的可执行文件,可执行文件的名称来自于编译时的包名。
- go install 输出目录始终为 GOPATH 下的 bin 目录,无法使用-o附加参数进行自定义。
- GOPATH 下的 pkg 目录放置的是编译期间的中间文件。
跨平台编译
以前运行和安装,都是默认根据我们当前的机器生成的可执行文件,比如你的是Linux 64位,就会生成Linux 64位下的可执行文件,比如我的Mac,可以使用go env查看编译环境,以下截取重要的部分。
➜ ~ go env
GOARCH="amd64"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
注意里面两个重要的环境变量GOOS和GOARCH,其中GOOS指的是目标操作系统,它的可用值为:
aix
android
darwin
dragonfly
freebsd
illumos
js
linux
netbsd
openbsd
plan9
solaris
windows
一共支持13种操作系统。GOARCH指的是目标处理器的架构,目前支持的有:
arm
arm64
386
amd64
ppc64
ppc64le
mips
mipsle
mips64
mips64le
s390x
wasm
一共支持12种处理器的架构,GOOS和GOARCH组合起来,支持生成的可执行程序种类很多,具体组合参考https://golang.org/doc/install/source#environment
。如果我们要生成不同平台架构的可执行程序,只要改变这两个环境变量就可以了,比如要生成linux 64位的程序,命令如下:
GOOS=linux GOARCH=amd64 go build flysnow.org/tour
前面两个赋值,是更改环境变量,这样的好处是只针对本次运行有效,不会更改我们默认的配置。
获取远程包
因为众所周知的原因,在获取远程包之前,我们需要先配置的代理,这里推荐goproxy.io代理,设置命令如下:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
设置好代理后,就可以使用go提供的一个获取远程包的工具go get来获取远程包了,它需要一个完整的包名作为参数,只要这个完整的包名是可访问的,就可以被获取到,比如我们获取一个CLI的开源库:
go get -v github.com/spf13/cobra
就可以下载这个库到我们$GOPATH/pkg/mod目录下了,这样我们就可以像导入其他包一样import了。
特别提醒,go get的本质是使用源代码控制工具下载这些库的源代码,比如git,hg等,所以在使用之前必须确保安装了这些源代码版本控制工具。
如果我们使用的远程包有更新,我们可以使用如下命令进行更新,多了一个-u标识。
go get -u -v github.com/spf13/cobra
获取gitlab私有库包
如果是私有的git库怎么获取呢?比如在公司使用gitlab搭建的git仓库,设置的都是private权限的。这种情况下我们可以配置下git,就可以了,在此之前你公司使用的gitlab必须要在7.8之上。然后要把我们http协议获取的方式换成ssh,假设你要获取http://git.flysnow.org,对应的ssh地址为git@git.flysnow.org,那么要在终端执行如下命令。
git config --global url."git@git.flysnow.org:".insteadOf "http://git.flysnow.org/"
这段配置的意思就是,当我们使用http://git.flysnow.org/获取git库代码的时候,实际上使用的是git@git.flysnow.org这个url地址获取的,也就是http到ssh协议的转换,是自动的,他其实就是在我们的~/.gitconfig配置文件中,增加了如下配置:
[url "git@git.flysnow.org:"]
insteadOf = http://git.flysnow.org/
然后需要把git.flysnow.org加入GOPRIVATE环境变量中,因为它是你的私有仓库,不需要走GOPROXY代理。
设置不走 proxy 的私有仓库,多个用逗号相隔(可选)
go env -w GOPRIVATE=git.flysnow.org
现在我们就可以使用go get直接获取了,比如:
go get -v -insecure git.flysnow.org/hello
仔细看,多了一个-insecure标识,因为我们使用的是http协议, 是不安全的。当然如果你自己搭建的gitlab支持https协议,就不用加-insecure了,同时把上面的url insteadOf换成https的就可以了。
VSCode搭建
从Windows打开我们的VSCode,然后远程到WSL
安装Go插件
如果我们直接将示例代码进行F5运行,提示需要安装一些包
直接点击大概率是安装失败的
我们要单独进行操作,因为dlv主要牵扯到debug调试
也是决定了我们开发幸福指数的重要工具
dlv安装
go install github.com/go-delve/delve/cmd/dlv@latest
在确认安装了GCC之后,根据提示返回VSCode再次安装dlv
稍等片刻
就可以看到提示成功字样
此时F5,发现依然无法运行
解决办法:
go env -w GO111MODULE=auto
OK!环境成功搭建
Windows环境 Go换源
上述操作均是Linux环境,但是随着工具的使用,windows环境下工具链的使用也提上了日程
大部分步骤都一样,环境变量安装包会自动添加
问题主要出在了一些包的下载,因为超时的原因无法正常下载
首先进行一个类似于Linux的换源操作
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
然后控制栏输入 Updata
全选,安装或者升级这些包
可以看到安装成功的提示
windows环境大功告成!
以上是关于Go语言 | 01 WSL + VSCode环境搭建避坑指南的主要内容,如果未能解决你的问题,请参考以下文章
在Windows中使用WSL和VS Code搭建出友好的终端开发环境
在Windows中使用WSL和VS Code搭建出友好的终端开发环境
在windows上利用VSCode和WSL搭建C语言开发环境