我想说的是,好家伙Golang的项目构建稍有些繁琐呀,用户体验来说没有python、java那么简单方便。 在Google搜索golang package自定义包方面的资料,发现搜索的结果不是很令人满意。不是说的很浅,就是说的很深,都伸到编译器层面了,蒙圈…
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新. http://xiaorui.cc/2016/03/13/%E5%85%B3%E4%BA%8Egolang-package%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8C%85%E7%BB%93%E6%9E%84/
废话少说,直接开始聊Golang的package关键字与项目组织代码的用法。
Golang项目目录下一般有三个子目录:
– src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件
一个目录下的.go文件里的package包名要一样,不然你import后会出现各种问题。package中的名称最好与目录名一样,这样在import的时候直接import目录名就好了。如果你的目录名跟包名package不一致,那么import 上层的目录就可以了。
Golang要构建一个项目有这么几个点要注意.
1. 首先要注意GOPATH环境,一定要确保你的项目在GOPATH内。
2. 尽量要让目录名跟package一致, 这样import引入自定义包时候不会出问题
3. main是一个特殊的package名字,类似Java的main函数,GO的可执行程序必须在main package下
我们开始创建一个新的项目,并自定义几个包,在main里应用这些包,也可以让同一个package包的不同文件互相的调用函数方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#http://xiaorui.cc #一定确保你的项目在GOPATH环境变量里面,GOPATH可以用; 分好定义多个环境位置。 $ echo $GOPATH /Users/ruifengyun/gg::/Users/ruifengyun/project #src一般是用来存放具体代码的. # ruifengyun at xiaorui in ~/project/src [11:42:54] $ pwd /Users/ruifengyun/project/src #下面是项目的代码结构. # ruifengyun at xiaorui in ~/project/src [11:42:26] $ tree |____project | |____bin | |____pkg | | |____darwin_amd64 | | | |____handler.a | | | |____kill.a | | | |____pac.a | | | |____run.a | |____src | | |____handler | | | |____an.go | | | |____h.go | | |____main.go | | |____pac | | | |____pac.go | | |____run | | | |____main.go 下面是指定的详细代码。 # ruifengyun at xiaorui in ~/project/src [11:47:32] $ cat handler/an.go package handler import ( "fmt" ) func An() { Hot() fmt.Println("func An in An, file is an.go") } # ruifengyun at xiaorui in ~/project/src [11:47:37] $ cat handler/h.go package handler import ( "pac" ) func Hot() { pac.PacPrint("Hot from pac func , file is h.go") } # ruifengyun at xiaorui in ~/project/src [11:47:41] $ cat pac/pac.go package pac import ( "fmt" ) func PacPrint(x string) { fmt.Println(x + "func PacPrint in pac file") } |
运行main之前,我们需要把上面的包一个个的go build, go install
1 2 3 4 5 6 7 |
#http://xiaorui.cc go build pac go install pac go build handler go install handler |
我们build源码后会发现在pkg里多了*.a的文件.
1 2 3 4 5 6 7 |
# ruifengyun at xiaorui in ~/project/src $ go run main.go http://xiaorui.ccfunc PacPrint in pac file Hot from pac func , file is h.gofunc PacPrint in pac file Hot from pac func , file is h.gofunc PacPrint in pac file func An in An, file is an.go |
关于Golang自定义包引入就说这么多了,以后遇到新问题咱们再具体阐述一下。
有疑问加站长微信联系(非本文作者)