wsl2安装

1、检查是否打开了Linux子系统功能和虚拟机平台

控制面板 -> 程序 -> 程序和功能-启用或关闭Windows功能
win10下wsl2 golang goland配置 - 图1

2、官方安装步骤链接:适用于 Linux 的 Windows 子系统安装指南 (Windows 10)

如果Linux子系统功能和虚拟机平台功能已打开则可以跳过安装步骤中的步骤1和步骤3。次安装步骤默认把linux子系统安装到C盘。若想安装到其它盘,参考离线下载安装。

3、离线下载安装

点击下载链接
下载自己需要的版本,下载完成后将文件拷贝到自己要安装的目录中去(最好不要带中文),将下载文件的后缀名改为 .zip,解压文件,点击 exe 程序即可安装ubuntu。

更换Ubuntu源地址(可不设置)

切换到 /etc/apt 目录下,备份源文件。

  1. cd /etc/apt
  2. sudo cp sources.list sources.list.bak

使用vi编辑文件

  1. sudo vi sources.list

命令模式下直接输入 ggdG 清空所有文本,然后按 i 进入插入模式,复制下面的内容到文件中。

  1. # 清华大学源
  2. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
  3. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
  4. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
  5. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
  6. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
  7. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
  8. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
  9. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

ESC键回到 vi 命令模式,按 **:** 进入行末模式,输入 wq 保存并退出。
最后更新源文件。

  1. sudo apt-get update && sudo apt-get upgrade

打开ubuntu终端的方式,有如下几种

1 在开始菜单中点击 Ubuntu 图标。
2 打开 cmd 命令行窗口,输入 bash 命令进入Ubuntu。
3 快捷键 Win+R 输入bash 进入。
4 在指定文件夹下进入Ubuntu,可在路径框输入 bash ,回车。
5 在指定文件夹下 Shift+右键,选择在此处打开Linux shell。

wsl2开启systemctl命令(重启后会失效)

参考:链接

  1. sudo apt-get install daemonize # 安装daemonize
  2. sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
  3. exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME

安装Golang

1、Golang的国内网站 https://golang.google.cn/dl/ 下载安装包

2、在存放压缩包的目录打开linux子系统,然后进行解压

本示例安装的Ubuntu子系统,下载的go1.16版本,压缩包存放在 D:\ubuntu,将 D:\ubuntu\work\go 作为GOPATH 目录。
win10下wsl2 golang goland配置 - 图2

  1. tar -C /usr/local/ -xzf go1.16.5.linux-amd64.tar.gz

win10下wsl2 golang goland配置 - 图3

3、设置环境变量

/etc/profile 中写入环境变量 vi /etc/profile

  1. export GOPATH=/mnt/d/ubuntu/work/go
  2. export GOROOT=/usr/local/go
  3. export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

输入 source /etc/profile 使配置文件生效。
win10下wsl2 golang goland配置 - 图4

如果 go env 查看GOPATH与GOROOT并未生效。 那么在 ~/.zshrc 中最后一行加入 source /etc/priofile 或者加上跟上面一样的三条环境变量配置。

4、配置远程拉取包的代理

这里使用https://goproxy.io代理。

  1. go env -w GO111MODULE=on
  2. go env -w GOPROXY=https://goproxy.io,direct

测试简单程序

进入工作目录,创建hello文件

  1. cd $GOPATH/src
  2. touch hello.go
  3. vi hello.go

写入以下代码

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Println("Hello, World!!!")
  5. }

运行

  1. go run hello.go

win10下wsl2 golang goland配置 - 图5

测试远程拉取包

go get来获取远程包了,它需要一个完整的包名作为参数,只要这个完整的包名是可访问的,就可以被获取到,比如我们获取一个gin框架 :

  1. go get -v github.com/gin-gonic/gin

就可以下载这个库到我们 $GOPATH/pkg/mod 目录下了,这样我们就可以像导入其他包一样 import 了。
创建 hello.go 文件并写入以下代码。

  1. package main
  2. import "github.com/gin-gonic/gin"
  3. func main() {
  4. r := gin.Default()
  5. r.GET("/ping", func(c *gin.Context) {
  6. c.JSON(200, gin.H{
  7. "message": "pong",
  8. })
  9. })
  10. r.Run() // 监听并在 0.0.0.0:8080 上启动服务
  11. }

启动服务:go run hello.go
测试服务:curl 127.0.0.1:8000/ping

Goland调用WSL2中go环境

1、Goland设置里运行目标添加WSL

File -> settings -> Build, Execution -> Run Targets
win10下wsl2 golang goland配置 - 图6
点击运行目标里面的加号,创建一个运行目标,选择里面的 wsl,点击下一步,点击完成。
win10下wsl2 golang goland配置 - 图7
添加语言运行时,选择go。
Go Executable: 输入 wsl2 中的 go 可执行文件。查看方式:wsl2 中运行命令 whereis go
win10下wsl2 golang goland配置 - 图8
返回结果中第一个是 go sdk 文件夹,第二个是 Windows10 里面的 go 环境映射到了 wsl2 里。第三个 /usr/local/go/bin/go 是 wsl2 里面 go 的可执行文件。

GOPATH:通过命令 go env 获得,找到返回结果里面的 GOPATH=” “ 对应结果。

2、修改go编译器设置

设置如下所示
win10下wsl2 golang goland配置 - 图9
使用如下代码测试是否成功

  1. func main() {
  2. //runtime.GOARCH 返回当前的系统架构;runtime.GOOS 返回当前的操作系统。
  3. sysType := runtime.GOOS
  4. if sysType == "linux"{
  5. // LINUX系统
  6. fmt.Println("Linux system")
  7. }
  8. if sysType == "windows" {
  9. // windows系统
  10. fmt.Println("Windows system")
  11. }
  12. fmt.Println("Hello,世界!")
  13. }

win10下wsl2 golang goland配置 - 图10