Golang环境安装(WSL-Ubuntu)

陈国帆 · · 3236 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

注:

  • 该文章原本服务于中山大学服务计算课第一次作业
  • 谁适合看本文?

    1. 在上pml的服务计算课的同学
    2. 使用Ubuntu,正在安装golang的小白
    3. 使用Wsl,正在安装golang的小白
    4. 使用Windows,纠结于安装虚拟机或者双系统,且正在安装golang的小白

目录

1 系统环境

设备操作系统
Surface pro (2018)ubuntu(WSL)

要在windows机器上安装linux,传统的办法是双系统或者虚拟机,前者麻烦,后者性能孱弱。
于是我尝试了下win10的WSL(Windows Subsystem for Linux,即在Windows中内置一个羽量级的Linux子系统,使用时可在窗口中打开,通过命令行操作),搭配VSCode为之配套的Remote WSL功能。目前为止还比较顺利,既不麻烦也不孱弱。

Wiki of WSL

WSL不提供图形界面,所有的操作都通过命令行执行。
image.png

在权限设置允许后,通过VSCode Remote WSL能管理子系统中的文件。
image

WSL下的Ubuntu与普通的Ubuntu并没有本质上的区别,因此本文也可供使用Ubuntu虚拟机或双系统的同学参考

2 安装Golang

2.1 自动安装

ubuntu安装软件一般通过apt这一工具,这里可以用以下语句一键自动安装golang:

$ sudo apt install golang-go

但是!用这样的办法自动安装的golang并非最新版(15.1),而是13.8。

2.2 版本低会有什么问题?

作业文档中写到“版本低不会影响正常使用”,但实际上版本非最新会导致无法安装vscode的go tools。因此需要更新。

2.3 更新

大体参考该博客的方法(但部分地方有问题):

https://www.jianshu.com/p/85e...

  1. 卸载旧版本(可选)。

    $ apt remove golang-go
  2. 下载。参考最新版本,在这里需要的是以下代码:

    $ wget https://studygolang.com/dl/golang/go1.15.2.linux-amd64.tar.gz
  3. 解压。注意,解压到/usr/local可能会更好(/usr/local才是默认的安装地址):

    $ tar -zxvf golang/go1.15.2.linux-amd64.tar.gz -C /usr/local
  4. 设置环境变量,并执行使之生效(非常讲究,单开一节,详见3 环境变量)
  5. 检查版本

    $ go version

    如以下显示就表示更新完成了。

    go version go1.15.1 linux/amd64

    否则多半是环境变量的问题.

3 环境变量

3.1 在哪里设置环境变量

首先需要理解ubuntu的环境变量,可参考文章:
https://my.oschina.net/liting...

添加环境变量的逻辑是很简单的,在环境变量文件中用export语句写入环境变量,再用source命令执行该文件即可。问题在于ubuntu中有多个环境变量文件,且每个文件的生效范围、生效时间各不相同,且互相影响。如果设置不好环境变量很容易出现以下问题:

  • 每次重启终端后环境变量都会失效,需要重新执行source命令
  • 修改环境变量时多个环境变量文件间产生冲突

这里给出我自己的经检验有效的环境变量设置方法:

  1. 只在/etc/profile文件中写入环境变量,方法是在文件后方空白处加入条目,例如(需要这三条,具体变量值仅供参考,如何确定请看3.2):

    export GOPATH=/home/chen/gowork
    export GOROOT=/usr/local/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
  2. 在~/.bashrc文件后方增添一条

    source /etc/priofile

    在终端中输入source /etc/profile或重启终端后环境变量会开始生效。

3.2 根据你的情况修改环境变量

你需要根据你的情况决定你的go环境变量,首先需要理解go的环境变量。可参考文章:
https://juejin.im/post/684490...
或官方手册:
https://go-zh.org/doc/code.ht...

  • GOPATH: 你的工作目录,完全取决于你。如果你使用WSL或有使用远程桌面的需求,我建议你把工作空间放在非root权限的目录,并在设置好GOPATH后使用chmod命令改变工作目录的权限:

    $sudo chmod 777 $GOPATH
  • GOROOT: 一般不需要手动设置,但由于我们以解压覆盖的方式手动更新golang,GOROOT变量没有被自动更新,所以需要手动设置。GOROOT应为go的安装目录,如果你在上面的步骤中解压在了/usr/local/,则这里应该设为/usr/local/go

设置完毕并执行source命令后可通过以下命令检验环境变量是否修改成功:

# print GOPATH
$ echo $GOPATH

# print GOROOT
$ echo $GOROOT
  
# or print all go environment variables
$ go env

4 hello.go

试着运行hello.go检验安装是否成功。

建立源代码目录并建立代码文件:

# 创建文件夹
$ mkdir $GOPATH/src/github.com/github-user/hello -p

# 进入文件夹
$ cd $GOPATH/src/github.com/github-user/hello

# 创建文件hello.go
$ touch hello.go

hello.go:

package main

import "fmt"

func main() {
 fmt.Printf("hello, worldn")
}

run(在hello目录):

$ go run hello.go

输出:

hello,world

5 安装go tools

当你每次打开vscode后第一次修改一个.go文件后,vscode会提醒你安装tools。其方法是通过go get指令从网络中获得各项工具的文件到本地 GOPATH/src/并安装到GOPATH/bin。

而go get会自动从golang(golang.org)官网中拉取内容并安装。由于众所周知的原因,golang.org在大陆无法访问,因此无法自动安装tools。好在这些内容在github上都有,我们可通过仍在墙内的github来拉取这些文件,然后手动安装。

5.1 从官方github仓库中拉取来自官方的tools

# 创建文件夹
mkdir $GOPATH/src/golang.org/x/

# 下载源码
go get -d github.com/golang/tools

# copy 
cp $GOPATH/src/github.com/golang/tools $GOPATH/src/golang.org/x/ -rf

执行上述三条命令后会把golang官方的tools全部拉取到本地,且以合适的文件组织方式组织。(从golang.org拉取会优先在本地$GOPATH/src/golang.org/中搜索,如果找到就不必再上https://golang.org拉取

此时你的工作空间目录结构应该如此:

$GOPATH
   └─src
      ├─ github.com
      |      └─ golang
      |           └─ tools
      └─ golang.org
             └─ x

里面已经有了官方的一些golang工具。

5.2 按提示拉取非官方工具

在vscode提示安装的工具中,一些来自非官方的github仓库,此时这些工具你的本地还没有,请对应使用go get指令。

:

提示 :

installing github.com/sqs/goreturns FAILED 

对应应该在终端中执行:

go get github.com/sqs/goreturns

由于一些工具间具有依赖关系,如果你在按顺序拉取时遇到超时,可以先拉取后面的工具,之后再拉取前面被跳过的工具。

6 通过go tour初步学习golang

Go-tour

这是Go语言的官方中文教程,可安装到本地离线运行,也可在网页上学习。

7 第一个包测试

参考文档

工作空间中有关目录结构如下:

$GOPATH
  └─src
     └─ github.com
            └─github-user
                 ├─hello
                 |  └─hello.go 
                 └─stringutil
                     └─reverse.go 

其中:

hello.go:

package main
import (
 "fmt"
 "github.com/github-user/stringutil"
)

func main() {
 fmt.Println(stringutil.Reverse("!oG ,olleH"))
}

reverse.go:

package main

import (
 "fmt"
 "github.com/user/stringutil"
)

func main() {
 fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}

测试执行:

$ go install github.com/github-user/hello
$ hello

结果:

Hello, Go!

执行后的工作空间:

$GOPATH
   ├─bin
   |  └─hello 
   |
   ├─ pkg
   |   └─linux_amd64
   |       └─github.com
   |            └─github-user
   |                 └─stringutil.a 
   |
   └─src
      └─ github.com
            └─github-user
                 ├─hello
                 |  └─hello.go 
                 └─stringutil
                     └─reverse.go 
  • 注意,安装包时只有使用

    $ go install github.com/github-user/hello

    才会在pkg中生成包文件。

    $ cd $GOPATH/src/github.com/github-user/hello
    $ go install

    这种方式不会生成pkg文件。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:陈国帆

查看原文:Golang环境安装(WSL-Ubuntu)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3236 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2021-03-01 13:50:16
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传