Go语言 | 01 WSL + VSCode环境搭建避坑指南

文章目录

  • 前言
  • Go安装包下载安装
    • GOPATH目录
    • go项目工程结构
    • Hello World
    • 安装程序
    • 跨平台编译
    • 获取gitlab私有库包
  • VSCode搭建
  • Windows环境 Go换源

前言

因为工作原因,需要使用Go语言进行开发,作为一个嵌入式开发人员,兵来将挡水来土掩

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

Go安装包下载安装

https://studygolang.com/dl

开发环境为WSL,所以直接选择Linux版本下载

Go语言 | 01 WSL + VSCode环境搭建避坑指南_第1张图片

下载后找个位置解压文件
在这里插入图片描述
执行解压指令

tar zxvf go1.18.3.linux-amd64.tar.gz

Go语言 | 01 WSL + VSCode环境搭建避坑指南_第2张图片

把解压后的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"

Go语言 | 01 WSL + VSCode环境搭建避坑指南_第3张图片
其中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地址为[email protected],那么要在终端执行如下命令。

git config --global url."[email protected]:".insteadOf "http://git.flysnow.org/"

这段配置的意思就是,当我们使用http://git.flysnow.org/获取git库代码的时候,实际上使用的是[email protected]这个url地址获取的,也就是http到ssh协议的转换,是自动的,他其实就是在我们的~/.gitconfig配置文件中,增加了如下配置:

[url "[email protected]:"]
    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插件
Go语言 | 01 WSL + VSCode环境搭建避坑指南_第4张图片
如果我们直接将示例代码进行F5运行,提示需要安装一些包
Go语言 | 01 WSL + VSCode环境搭建避坑指南_第5张图片

直接点击大概率是安装失败的

我们要单独进行操作,因为dlv主要牵扯到debug调试

也是决定了我们开发幸福指数的重要工具

dlv安装

go install github.com/go-delve/delve/cmd/dlv@latest

在这里插入图片描述
在确认安装了GCC之后,根据提示返回VSCode再次安装dlv

稍等片刻

就可以看到提示成功字样
Go语言 | 01 WSL + VSCode环境搭建避坑指南_第6张图片

此时F5,发现依然无法运行
Go语言 | 01 WSL + VSCode环境搭建避坑指南_第7张图片
解决办法:

go env -w GO111MODULE=auto

Go语言 | 01 WSL + VSCode环境搭建避坑指南_第8张图片
OK!环境成功搭建

Windows环境 Go换源

上述操作均是Linux环境,但是随着工具的使用,windows环境下工具链的使用也提上了日程

大部分步骤都一样,环境变量安装包会自动添加

问题主要出在了一些包的下载,因为超时的原因无法正常下载

首先进行一个类似于Linux的换源操作

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn

然后控制栏输入 Updata

Go语言 | 01 WSL + VSCode环境搭建避坑指南_第9张图片
全选,安装或者升级这些包
Go语言 | 01 WSL + VSCode环境搭建避坑指南_第10张图片
可以看到安装成功的提示

Go语言 | 01 WSL + VSCode环境搭建避坑指南_第11张图片
windows环境大功告成!

你可能感兴趣的:(Go,vscode,ide,编辑器)