学习资料来自
GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》
启动外部命令和程序
1、os 包 :StartProcess 函数(可调用或启动外部系统命令+二进制可执行文件)
1)参数
(1)参数1:要运行的进程
(2)参数2:传递选项或参数
(3)参数3:含有系统环境基本信息的结构体
2)返回值:
(1)启动成功:被启动进程的 id
(2)启动失败:返回错误
2、exec 包 :exec.Command(name string, arg ...string) 函数和 Run() 函数
(1)exec.Command(name string, arg ...string) :系统命令/可执行文件名字创建 Command 对象
(2)Command.Run() :执行Command中的命令或可执行文件
测试
1、测试程序必须属于被测试的包,文件名满足*_test.go形式,测试代码和包中的业务代码是分开的。
2、_test 程序不会被普通的 Go 编译器编译,只有 gotest 会编译所有的普通程序和测试程序。
3、测试文件中必须导入 "testing" 包同时包含一些以 Test 打头的全局函数,例如:
func TestAbcde(t *testing.T)
1)T:传给测试函数的结构类型,用来管理测试状态,如 t.Log,t.Error,t.ErrorF 等。
2)在函数的结尾把输出跟想要的结果对比,如果不等就打印一个错误,成功的测试则直接返回。
4、数据表驱动测试
var tests = []struct{ // Test table
in string
out string
}{
{"in1", "exp1"},
{"in2", "exp2"},
{"in3", "exp3"},
...
}
func verify(t *testing.T, testnum int, testcase, input, output, expected string) {
if expected != output {
t.Errorf("%d. %s with input = %s: output %s != %s", testnum, testcase, input, output, expected)
}
}
func TestFunction(t *testing.T) {
for i, tt := range tests {
s := FuncToBeTested(tt.in)
verify(t, i, "FuncToBeTested: ", tt.in, s, tt.out)
}
}
性能调试:分析+优化
1、时间和内存消耗:脚本测量便捷脚本( /usr/bin/time -f '%Uu %Ss %er %MkB %C' "$@" )
2、go test 调试
1)-cpuprofile 选项 :向指定文件写入 CPU 使用情况
2)-memprofile 选项 :向指定文件写入内存使用情况
3、pprof 调试 :以 pprof 可视化工具需要的格式写入运行时报告数据(这部分看得晕乎,不看了,之后实践出真知吧,哈哈就是要偷个理直气壮的懒)