目录
Deepin 简介
Deepin 操作系统是由武汉深之度科技有限公司基于 Debian 开发的Linux发行版。
因为这是本人关于在 Deepin 虚拟机上工作、学习的第一篇博客,所以想简要介绍一下 Deepin 的使用情况。
优势
- 个人选择 Deepin 是因为其安装简单,而且没有Ubuntu那么多坑,可以在10分钟内很轻松地进行 Deepin 虚拟机的创建。
- Deepin 的界面十分友好,有时尚模式和高效模式,但无论哪种模式都可以满足我个人审美的体验,相比于身边同学使用的比较多的 Ubuntu ,这款操作系统以它的小巧和精致打动了我。
遇到问题的解决
Deepin采用的是Debian的一个稳定分支进行拓展而来,因此遇到诸如软件包安装此类的问题,可以直接参考Debian系统下的解决方案。
版本的选择
目前Deepin已经更新到了23预览版以及20.7的稳定版,15.4版已确定停止更新,建议选择15.4的旧版,其稳定性是20版完全无法媲美的,而且对于虚拟机使用的系统来说,保持更新不如求稳。
官网已停止提供15版的虚拟光盘下载,此处提供一个百度网盘下载链接:
下载链接:https://pan.baidu.com/s/17zxA1dCBlxP3qN6RUn7utQ?pwd=sg4y
提取码: sg4y
# VSCode 安装 在官网下载 VSCode 程序包: 下载地址: [https://go.microsoft.com/fwlink/?LinkID=760868](https://go.microsoft.com/fwlink/?LinkID=760868) 也可以在 /usr/local文件夹下打开终端,使用: `sudo wget https://go.microsoft.com/fwlink/?LinkID=760868` 直接获取代码压缩包,然后解压即可。 打开代码文件夹,在 bin 文件夹下即可找到可执行文件 code,双击就可以开始使用 VSCode 了。
# GoLang 安装配置 使用:`sudo yum install golang` 即可安装 GoLang > yum 全称 Yellow dog Updater Modified,yum 的主要用途是对 rpm 包进行管理,包括安装、卸载、升级等。
可以参考:https://www.cnblogs.com/ct20150811/p/10696635.html 来进行 yum 的安装、配置。
安装完成,在终端输入:go version
GoLang 环境变量配置
Go程序包默认安装到了 /usr/local/go,并且已经自动配置了 GOROOT。
我们现在需要自己创建一个文件夹作为 Go 的工作空间。
为方便起见我直接在桌面创建了 GoEnv 文件夹(鼠标右键 - 新建文件夹),由于不是在终端创建的,所以可以直接使用图形化的界面进行文件的创建和修改,这个在后面用 VSCode 打开工作空间,才能够直接在 VSCode 中创建文件。
现在可以来配置工作空间的环境变量了:
Deepin 系统的环境变量的配置文件路径为 /etc/profile
,
可以直接运行:sudo vim /etc/profile
然后在文件的最后面添加:
# GOROOT: GO的安装路径
export GOROOT=/usr/local/go
# GOPATH: GO的工作路径
export GOPATH=
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
然后在终端运行:
source指令可以让配置文件立即生效,但是运行 source /etc/profile
之后命令行变为了奇怪的颜色,然后关闭终端后,配置便失效了,于是我尝试把网上两种更新源的方法组合起来,颜色恢复正常,同时配置也持久化了!
使用 go env
检验 GOPATH 配置情况:
GOPATH="/home/tommy/Desktop/GoEnv"
GoLang 的简单使用
首先在工作空间创建我们的项目文件夹:
mkdir $GOPATH/src/github.com/github-user/hello -p
然后我们用 VSCode 打开工作空间所在的文件夹(也就是之前创建在桌面的 GoEnv),在 VSCode 中找到我们创建项目文件夹,创建 hello.go 文件,编辑、保存:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
在终端使用:go run hello.go
Go 必要工具与插件的安装
git 客户端的安装
使用:sudo yum install git
VSCode 插件安装
在 VSCode 中创建了一个 .go 文件之后,会立即弹窗让我安装相关插件,但是点击安装,又全部都安装失败了。
只是因为无法连接 golang 的官网获取工具包。
于是我们只能从 Github 上下载工具包后进行安装:
# 创建文件夹
mkdir $GOPATH/src/golang.org/x/ -p
# 下载源码
go get -d github.com/golang/tools
# copy
cp $GOPATH/src/github.com/golang/tools $GOPATH/src/golang.org/x/ -rf
下载源码的过程莫名失败,这时不必慌张,可以直接用 git clone 将源码克隆到我们需要的文件夹,也即 $GOPATH/src/golang.org/x/tools
具体过程即为:创建 tools 文件夹,然后在文件夹内打开终端,运行:
sudo git clone https://github.com/golang/tools.git
然后我们关闭 VSCode 后,再次进入,重新进入 .go 文件,VSCode便会再次弹窗让我们安装所有的插件,这时我们直接开始安装,稍等片刻(10 mins)即可安装完成。
现在我们可以安装我们自己编写的程序了:
go install github.com/github-user/hello
注意我们可以在系统的任何地方运行这个指令,因为 go 会自动在 GOROOT 和 GOPATH 指定的工作区间查找,我们只需保证包的名字是正确的即可:
此命令会构建 hello 命令,产生一个可执行的二进制文件,接着它会将该二进制文件作为 hello 安装到工作空间的 bin 目录中,可以直接使用 $GOPATH/bin/hello
执行该命令。
如果已经把 $GOPATH/bin
添加到环境变量中了,就可以像图中那样,直接运行 hello 命令(感觉离写游戏脚本又近了一步)。
安装、运行 go tour
Go 语言学习之旅(go tour)是 Github 上的一个软件库,我们可以直接 git clone
下来,然后用 go install
进行下载,这样我们就可以离线运行这款软件。
git clone https://github.com/Go-zh/tour.git
然后执行 go install
:
go install github.com/Go-zh/tour.git
安装后执行结果如下:
我的第一个(功能齐全的)包与测试
参考:如何使用 GO 编程
为 hello 包添加自定义的库
之前我们创建与编写的 hello 包只是一个非常基本的示例,现在我们要创建一个自己的库供 hello.go 文件使用。
- 在 $GOPATH/src/github.com/github-user/文件夹下创建库所在的文件夹 /stringutil
- 然后在 /stringutil 文件夹下创建名为 reverse.go 的文件,同时编辑:
// stringutil 包含有用于处理字符串的工具函数。
package stringutil
// Reverse 将其实参字符串以符文为单位左右反转。
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
- 使用:
go build github.com/github-user/stringutil
编译该包,build 不会产生任何输出。 - stringutil 包构建完成后,将其添加到 hello 的 import 中:
- 再次运行:
go install github.com/github-user/hello
,运行生成的 hello 命令,可以看到 stringutil.Reverse 函数成功将字符串反向,输出为 “Hello, Go!”
测试
Go 自带的轻量级测试框架会自动运行每一个名字以 _test.go 结尾的,且包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件来进行测试;若该函数调用了像 t.Error 或 t.Fail 这样表示失败的函数,此测试即表示失败。
下面直接说明测试流程:
- 创建文件
$GOPATH/src/github.com/github-user/stringutil/reverse_test.go
来为 stringutil 添加测试:
package stringutil
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
- 在 /stringutil 文件夹下运行:
go test
进行测试:
小结
- 这是第一次真正在 CSDN 上写博客,感觉编辑工具非常人性化,看着自己打的 Markdown 语法在右侧呈现出了自己想要的效果还是很舒服的。
- 这次实验的过程中使用 Deepin 并不是很愉快,虽然表面上说 Deepin 可以完成大部分的需要,但是在使用 yum 安装 git 的时候出现 “事务检测错误“ ,但是网上只有 CentOs 的解决方案,而 Deepin 不支持直接使用 rpm 安装、卸载文件,导致无法使用教程,而且问题的报错也很是奇怪,但是最后使用
sudo apt-get install git
成功安装了 git,但没使用 yum 安装成功总还是有些担心。所以大家还是尽量使用 CentOS 或者 Ubuntu 等大规模的操作系统为好,这样可以在社区找到更多问题的解决方案。本人也考虑近期更换使用的虚拟机操作系统了。 - 初识 Go 语言,首先是为之
go install
命令的功能所震撼,创建一条二进制指令,在系统的任何地方都能够执行,感觉很高大上。关于语言的更多语法和特性应该会在之后的博客中总结。 - 在命令行使用
go run
go install
等指令的时候,一定要记清楚指令自动的搜索范围是$GOPATH/src
而不是$GOPATH
因为 src 文件夹才是存储源码的文件夹,pkg 文件夹用来存储包对象,而 bin 文件夹下为可执行文件。