分工协作及功能复用
1. 如何实现分工
-
模块化编程不仅可以提高代码结构的清晰度,还可以促进团队协作水平,提高开发效率
-
建立项目
- 建立项目文件夹,明确项目文件存放的具体位置
- 在
GOPATH
下的src
文件夹下面建立一个项目文件夹,如等差数列
-
根据分工,为每个开发者建立各自的工作目录,分别为
main
、input
、sum
、output
-
每个开发者右键各自的工作目录\选择New File 建立自己的go文件,分别为
main.go
、input.go
、sum.go
和output.go
-
其他工作目录和main文件夹在同级目录,那么在引用包的时候应写相对于
src
的相对路径; -
package input//input.go import ( "fmt" ) //Input 输入函数 func Input() (a1 int, num int, dis int) { //()表示无参数 fmt.Println("input a0") fmt.Scanln(&a1) fmt.Println("input num") fmt.Scanln(&num) fmt.Println("input dis") fmt.Scanln(&dis) return }
-
package sum//sum.go //Sum 求和函数 func Sum(a1,num,dis int)(ans int){ ans=a1*num+num*(num-1)*dis/2 return }
-
package output//output.go import ( "fmt" ) //Output 输出函数 func Output(ans int){ fmt.Println("the answer is:",ans) }
-
package main import ( "等差数列/input" "等差数列/sum" "等差数列/output" ) func main(){ a1,num,dis:=input.Input() ans:=sum.Sum(a1,num,dis) output.Output(ans) }
input a1 15 input num 20 input dis 3 the answer is: 870
2.如何进行单元测试
-
日常开发中, 测试是不能缺少的
-
Go 语言中自带有一个轻量级的测试框架testing 和自带的go test 命令来实现单元测试和性能测试
-
测试用例文件名必须以
*_test.go
结尾,*最好于测试文件的主文件名相同,以方便阅读 -
测试用例代码与被测试代码存放路径相同
-
标准测试参数为:
t *testing.T
-
testing 提供对 Go 包的自动化测试的支持。通过
go test
命令,能够自动执行如下形式的任何函数:func TestXxx(*testing.T)
其中
Xxx
可以是任何字母数字字符串(但第一个字母不能是 [a-z]),用于识别测试例程。 -
在这些函数中,使用 Error, Fail 或相关方法来发出失败信号。
-
一个测试用例文件中,可以有多个测试用例函数
-
PASS 表示测试用例运行成功,FAIL 表示测试用例运行失败
-
当出现错误时,可以使用
t.Fatalf
来格式化输出错误信息,并退出程序 -
t.Logf
方法可以输出相应的日志 -
(1)
cmd>go test
[如果运行正确,无日志,错误时,会输出日志]
(2)cmd>go test -v
[运行正确或是错误,都输出日志]
package sum//sum包
//Sum 求和函数
func Sum(a1,num,dis int)(ans int){
ans=a1*num+num*(num-1)*dis/2
return
}
package sum//对sum包的单元测试
import "testing"//通过testing包实现自动化测试
func TestSum(t *testing.T){
result:=Sum(1,100,1)
if result!=5050{
t.Fatalf("wrong")
}else{
t.Logf("success")
}
}
E:\file\golang\goproject\src\分工协作\eqd\sum>go test PASS ok 分工协作/eqd/sum 0.159s
E:\file\golang\goproject\src\分工协作\eqd\sum>go test -v === RUN TestSum TestSum: sum_test.go:9: success --- PASS: TestSum (0.00s) PASS ok 分工协作/eqd/sum 0.163s
3.如何进行性能测试
- 主要评价在压力环境下的的响应时间、负载等指标
- 建立
sum.go
的性能测试用例代码sum_b_test.go
- 测试函数名必须以
Benchmark
开头,标准性能测试参数为:b *testing.B
- 执行
go test –bench=.*
进行性能测试
package sum//对sum包的性能测试
import "testing"
func BenchmarkSum(b *testing.B){
for i:=0;i<b.N;i++{
//b.N为默认参数
Sum(1,100,1)
}
}
E:\file\golang\goproject\src\等差数列\sum> go test -bench=".*"
goos: windows goarch: amd64 pkg: 等差数列/sum BenchmarkSum-8 1000000000 0.260 ns/op PASS ok 等差数列/sum 0.459s
运行10亿次,用时
0.459s
,0.260ns/op
- 进行CPU和内存状态分析-文本格式
- 首先
go test -bench=".*" -cpuprofile=sum.prof
- 生成可执行测试文件
sum.test.exe
和CPU性能文件sum.prof
- 然后使用
go tool pprof
工具进入pprof
命令模式分析数据:go tool pprof sum.test.exe sum.prof
- 最后,输入text命令,以文本形式列出状态信息
- quit退出
- tree /f可以看到文件树
- 首先
- 进行CPU和内存状态分析-状态图方式
- 首先
go test -bench=".*" -cpuprofile=sum.prof
- 然后使用
go tool pprof
工具进入pprof
命令模式分析数据:go tool pprof sum.test.exe sum.prof
- 输入web命令,在IE中查看
cpu
性能分析图(需要提前安装好graphviz
才能在IE中以图形方式查看)
- 首先
4.如何集成?
- 在项目研发过程中,单元测试和性能测试通过后,如何将各部分代码汇总形成完整的系统?各个项目成员又如何获取到完整的代码呢?
- 协同开发工具的推荐
- Source Control:
CVS/SVN、git 和github
- Bug Tracking:
Bugzilla, Trac, Roundup
- 交流工具:
maillist, IM, Forum, IRC, Wiki
- 协同开发平台:
sourceforge, BaseCamp
- Source Control:
5.如何编译并执行整个系统?
- go install 包源码存放路径的最后一个目录
- go install:主要用来生成库和工具。
- 一是编译包文件(无main包),将编译后的包文件放到 pkg 目录下(
$GOPATH/pkg
)。 - 二是编译生成可执行文件(有main包),将可执行文件放到 bin 目录(
$GOPATH/bin
)。
- 一是编译包文件(无main包),将编译后的包文件放到 pkg 目录下(
- 如
6.代码复用
-
package main//findmax main.go import ( "fmt" "代码复用/maxthree" ) func main(){ fmt.Println(maxthree.Maxthree(3,4,5)) }
-
package maxthree//maxthree maxthree.go import "代码复用/maxtwo" //Maxthree 找最大 func Maxthree(a,b,c int)int{ return maxtwo.Maxtwo(maxtwo.Maxtwo(a,b),c) }
-
package maxtwo//maxtwo maxtwo.go //Maxtwo 选出大者 func Maxtwo (a,b int)int{ if a>=b{ return a } return b }
o(maxtwo.Maxtwo(a,b),c)
}
+ ```go
package maxtwo//maxtwo maxtwo.go
//Maxtwo 选出大者
func Maxtwo (a,b int)int{
if a>=b{
return a
}
return b
}