Workflow for creating packages in Go
我了解Go中的程序是从
例如,在Python中,当直接调用模块时,我在模块中使用
1 2 | if __name__ =="__main__": # Run module code here if module called directly |
对于go,我使用一个带有
1 2 3 4 5 6 7 8 9 10 | // test.go package main import ( "newpackage" ) func main() { newpackage.MyNewFunc() } |
有没有更好的方法来实现这一点,或者这是标准的工作流程?谢谢。
您不需要使用
首先,阅读"如何编写Go代码",这将解释Go的包布局和测试工具。最好是和它们一起使用,因为很多go工具都期望这种布局。
创建包时,请将其放在
例如,我会使用
将函数放入
1 2 3 4 5 6 | $ cat ~/go/src/github.com/schwern/newpackage/newpackage.go package newpackage func MyNewFunc() string { return"Hello!" } |
然后在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ cat ~/go/src/github.com/schwern/newpackage/newpackage_test.go package newpackage_test import( "testing" "github.com/schwern/newpackage" ) func TestMyNewFunc( t *testing.T ) { want :="Hello!" have := newpackage.MyNewFunc() if have != want { t.Errorf("MyNewFunc(): have: '%v', want: '%v'", have, want ) } } |
如果在包目录中运行
1 2 3 4 5 6 7 | $ pwd /Users/schwern/go/src/github.com/schwern/newpackage $ go test -v === RUN TestMyNewFunc --- PASS: TestMyNewFunc (0.00s) PASS ok github.com/schwern/newpackage 0.013s |
请注意,测试与它的测试在不同的包中。这使它成为一个黑盒测试,它只能看到导出的(即大写)函数。您可以通过将测试放在同一个包中来进行Glassbox测试,最好在像
不幸的是,go不附带断言函数,上面的
1 2 3 4 5 6 7 8 9 10 11 | package newpackage_test import( "testing" "github.com/schwern/newpackage" "github.com/stvp/assert" ) func TestMyNewFunc( t *testing.T ) { assert.Equal( t, newpackage.MyNewFunc(),"Hello!" ) } |
如果您想要一个使用
1 2 3 4 5 6 7 8 9 10 11 | $ cat ~/go/src/github.com/schwern/newexec/main.go package main import ( "fmt" "github.com/schwern/newpackage" ) func main() { fmt.Println(newpackage.MyNewFunc()) } |
如果您想测试