Go语言是一门强类型的通用编程语言。它的基础语法与C语言很类似,但对于变量的声明有所不同,也对其他的一些优秀编程语言有所借鉴。另外,Go语言支持垃圾回收。
与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了 Slice 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。
Go语言对并发编程的支持是天生的、自然的和高效的。Go语言为此专门创造出了一个关键字“go”。使用这个关键字,我们就可以很容易的使一个函数被并发的执行。
Go是一门以软件工程为目的的语言设计:
- 快速编译
- 严格的依赖管理
- 代码风格的强一致性
- 偏向组合而不是继承
由于go语言的种种特点,其成为了云计算和服务计算开发的首选。所以借此机会,我们也学习了go语言在linux系统下的安装编写,在这里逐一介绍。
作为一款轻量级的文本编辑器,vscode一出世就引发了许多人的关注。事实上,在使用了多款编辑器之后,我发觉vscode的速度在其中是数一数二,因此这次在linux上也选择其作为go语言开发的平台。 要安装vscode,首先要安装umake。打开终端,使用下列命令,通过官方PPA来安装Ubuntu Make:
sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
sudo apt-get update
sudo apt-get install ubuntu-make
之后再通过umake来vscode
umake web visual-studio-code
提示架构冲突。索性直接去微软官网下载deb安装,简单快捷。这样我们就可以直接打开vscode了。
1、下载安装
2、环境配置
默认的时候,GOPATH是没有配置好的,那么我们怎么修改这些环境变量呢
首先,我们可以任选一个位置建一个文件夹,比如
mkdir /home/kloijm30/go
之后打开配置文件
sudo gedit /etc/profile
在最后添加export GOPATH=/home/kloijm30/go 以及export PATH=$PATH:/home/kloijm30/go/bin
1、编译并运行简单的程序,首先要选择包路径(我们在这里使用 github.com/user/hello),并在你的工作空间内创建相应的包目录:
$ mkdir $GOPATH/src/github.com/user/hello
然后用vscode新建文档hello.go
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
}
然后直接在vscode中打开终端,进入目录输入
go run hello.go
这样就可以看到运行结果了
2、构建安装程序 在任何位置输入命令
$ go install github.com/user/hello
1、先选择包路径(我们将使用 github.com/user/stringutil) 并创建包目录:
$ mkdir $GOPATH/src/github.com/user/stringutil
2、在该目录中创建名为 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)
}
3、修改hello.go文件为
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
4、再重新安装hello.go
go install github.com/user/hello
输出了逆向的字符,说明自己的库使用成功。
Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成。
你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件来编写测试。
在 $GOPATH/src/github.com/user/stringutil 中创建reverse_test.go
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)
}
}
}
这样便表示测试成功了。