注:
- 该文章原本服务于中山大学服务计算课第一次作业
谁适合看本文?
- 在上pml的服务计算课的同学
- 使用Ubuntu,正在安装golang的小白
- 使用Wsl,正在安装golang的小白
- 使用Windows,纠结于安装虚拟机或者双系统,且正在安装golang的小白
目录
1 系统环境
设备 | 操作系统 |
---|---|
Surface pro (2018) | ubuntu(WSL) |
要在windows机器上安装linux,传统的办法是双系统或者虚拟机,前者麻烦,后者性能孱弱。
于是我尝试了下win10的WSL(Windows Subsystem for Linux,即在Windows中内置一个羽量级的Linux子系统,使用时可在窗口中打开,通过命令行操作),搭配VSCode为之配套的Remote WSL功能。目前为止还比较顺利,既不麻烦也不孱弱。
WSL不提供图形界面,所有的操作都通过命令行执行。
在权限设置允许后,通过VSCode Remote WSL能管理子系统中的文件。
WSL下的Ubuntu与普通的Ubuntu并没有本质上的区别,因此本文也可供使用Ubuntu虚拟机或双系统的同学参考。
2 安装Golang
主要参考以下教程:
注意
1.安装包下载地址在以下地址获取最新
2.为了方便安装tool,环境变量里多加这个:
3 环境变量
3.1 在哪里设置环境变量
首先需要理解ubuntu的环境变量,可参考文章:
添加环境变量的逻辑是很简单的,在环境变量文件中用export语句写入环境变量,再用source命令执行该文件即可。问题在于ubuntu中有多个环境变量文件,且每个文件的生效范围、生效时间各不相同,且互相影响。如果设置不好环境变量很容易出现以下问题:
- 每次重启终端后环境变量都会失效,需要重新执行source命令
- 修改环境变量时多个环境变量文件间产生冲突
如果你使用bash,可直接在~/.bashrc文件后方增添一条
export GOPATH=/home/chen/gowork
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
在终端中输入source ~/.bashrc或重启终端后环境变量会开始生效。
(如果使用zsh,则是~/.zsh)
3.2 根据你的情况修改环境变量
你需要根据你的情况决定你的go环境变量,首先需要理解go的环境变量。可参考文章:
https://juejin.im/post/684490...
或官方手册:
https://go-zh.org/doc/code.ht...
$sudo chmod -R 777 $GOPATH
设置完毕并执行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提示的failed信息逐个拉取(会有一点点麻烦)。
5.3 Magic!
! 提供另一个超简单的方法:https://goproxy.cn/
例:
提示 :
installing github.com/sqs/goreturns FAILED
对应应该在终端中执行:
go get github.com/sqs/goreturns
由于一些工具间具有依赖关系,如果你在按顺序拉取时遇到超时,可以先拉取后面的工具,之后再拉取前面被跳过的工具。
6 通过go tour初步学习golang
这是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
$ cd $GOPATH/src/github.com/github-user/hello
$ go install