实验要求
仔细阅读 官方文档 如何使用Go编程 ,并按文档写第一个包,做第一次测试。``
实验内容
编写第一个程序,hello.go,学会使用package,学会使用go语言的基本命令,简单掌握测试方法。
实验过程
编写helloworld
在用户目录中创建第一个程序。
代码如下:
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
}
使用go工具构建安装此程序。
install命令可以在系统的任何地方运行。go 工具会根据之前设置的环境变量,在 github.com/user/hello 包内查找源码。也可以进入目录下直接使用 go install命令。
该命令会在目录bin下生成对应的二进制文件。
可以通过在命令行输入它的路径来运行它。
如果使用源码控制系统,那现在就该初始化仓库,添加文件并提交你的第一次更改了。
具体的仓库构建方法可以参考我的另一篇博客。
创建git本地仓库并绑定github对应的远程仓库
编写第一个库
将包的路径设为使用 github.com/user/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中需要将函数名首字母大写才能在包外访问该函数。
使用go build命令测试该包编译,和go install命令不同的是,该命令不会生成输出文件。
此时我们查看工作目录下的pkg文件夹,可以找到stringutil的包。
修改原来的hello.go文件来使用此包。
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
go install之后会自动将调用的stringutil也安装,将会看到输出了一条反向信息。
此时可以观察到工作空间如此:
注意在go语言中,包名应该与路径的最后一个元素相同。
测试reverse.go
在同一目录下创建测试文件,格式应为,以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件。
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进行测试。
另外,go 工具可通过此特性来从远程代码库自动获取包,不过遗憾的是难以在本地区实现,在安装go语言工具和gotour的过程中深有体会。
心得与体会
本次实验算是学习go语言以来的第一次实践,让我体会到go语言相比c++等其他语言方便的特性,在编写代码上更为放松,将更多工作交给编译,解放了程序员的思考。
在配置go语言的环境以及安装gotour的过程中,我感到了网络封锁带来的不便,在这样一个开源的时代,我期待更便于交流的网络环境。
同时经过本次的入门作业和快排算法的编写作业,我更加认识到主动查找资料积极思考的重要性,加强实践才能更好地吸收课上所学知识。