17343101 苏祺达
在命令行输入如下指令,创建工作环境
mkdir my-go-workspace
mkdir my-go-workspace/src
mkdir my-go-workspace/src/github.com
mkdir my-go-workspace/src/github.com/SYSU101
# 由于 pkg 和 bin 文件夹会由 go 工具自行创建,因此先不用管这两个文件夹
运行结果:

然后执行export GOPATH=$HOME/Desktop/ServiceComputingOnCloud/projects/operation3/my-go-workspace以创建GOPATH环境变量。
运行结果:

这里使用绝对路径太长了,用相对路径可不可以?从笔者为数不多的Go使用经历来看,不可以,会在之后构建包时报错,理由是GOPATH不能为相对路径。
在$GOPATH/src/github.com/SYSU101下,创建一个名为hello的文件夹,并在该文件下再创建一个名为hello.go的文件,在hello.go里,写入以下代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, world.\n")
}
然后使用go install github.com/user/hello命令安装此包,就可以执行$GOPATH/bin/hello运行生成的包啦!
运行结果:

创建$GOPATH/src/github.com/SYSU101/stringutil文件夹,并在该文件下面创建stringutil.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)
}
修改$GOPATH/src/github.com/SYSU101/hello/hello.go文件,将文件内容修改为:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
执行go install github.com/user/hello命令,构建hello命令,然后执行$GOPATH/bin/hello,就可以看到:

在$GOPATH/src/github.com/SYSU101/stringutil文件夹下创建stringutil_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)
}
}
}
接着使用go test github.com/SYSU101/stringutil运行该测试:
