This commit is contained in:
Unknwon
2015-03-05 02:48:45 -05:00
parent eab1d98ba8
commit 5ec2c25387
5 changed files with 66 additions and 54 deletions

View File

@@ -1,56 +1,57 @@
#9.8 自定义包:目录结构,go installgo test
# 9.8 自定义包目录结构go installgo test
212
为了示范我们创建了一个名为uc的简单包,它含有一个UpperCase函数将字符串的所有字母转换为大写。当然这并不值得创建一个自己包同样的功能已被包含在"strings"包里,但是同样的技术也可以应用在更复杂的包中。
##9.8.1 自定义包的目录结构
下面的结构给了你一个好的示范(uc代表通用包名, 名字为粗体的代表目录,斜体代表可执行文件):
/home/user/goprograms
下面的结构给了你一个好的示范(uc代表通用包名, 名字为粗体的代表目录,斜体代表可执行文件):
/home/user/goprograms
ucmain.go (uc包主程序)
Makefile (ucmain的2-makefile)
ucmain
src/uc (包含uc包的go源码)
uc.go
uc_test.go
uc_test.go
Makefile (包的1-makefile)
uc.a
_obj
uc.a
_obj
uc.a
_test
uc.a
bin (包含最终的执行文件)
ucmain
pkg/linux_amd64
uc.a (包的目标文件)
uc.a (包的目标文件)
将你的项目放在goprograms目录下(你可以创建一个环境变量GOPATH,参考2.2/3章节:在.profile和.bashrc文件中添加export GOPATH=/home/user/goprograms)而你的项目将作为src的子目录。uc包 中的功能在uc.go中实现。
示例 9.6 [uc.go](examples/chapter_9/uc.go)
package uc
import "strings"
func UpperCase(str string) string {
func UpperCase(str string) string {
return strings.ToUpper(str)
}
包通常附带一个或多个测试文件在这我们创建了一个uc_test.go文件如9.8章节所述
示例 9.7 [test.go](examples/chapter_9/uc.go)
package uc
import "testing"
type ucTest struct {
in, out string
in, out string
}
var ucTests = []ucTest {
ucTest{"abc", "ABC"},
ucTest{"cvo-az", "CVO-AZ"},
ucTest{"Antwerp", "ANTWERP"},
ucTest{"Antwerp", "ANTWERP"},
}
func TestUC(t *testing.T) {
@@ -73,12 +74,12 @@
include $(GOROOT)/scr/Make.pkg
在该目录下的命令行调用: gomake
这将创建一个_obj目录并将包编译生成的存档uc.a放在该目录下
这个包可以通过go test测试
创建一个ud.a的测试文件在目录下输出为PASS时测试通过
创建一个ud.a的测试文件在目录下输出为PASS时测试通过
在13.8章节我们将给出另外一个测试例子并进行深入研究
@@ -87,9 +88,9 @@
接下来我们创建主程序ucmain.go:
示例 9.8 [ucmain.go](/examples/chapter_9/ucmain.go)
package main
import (
import (
"fmt"
"./uc/uc"
)
@@ -97,7 +98,7 @@
func main() {
str1 := "USING package uc"
fmt.Println(uc.UpperCase(str1))
}
}
然后在这个目录下输入go install