go again
Introducation
(1)How to organize go code
(2)How to develope go package
(3)How to use go tool
How to orgnize go code:
workspace:
(1)src: one pakcage per directory
(2)pkg: package objects
(3)bin: executable commands
$GOPATH:
指定workspace
问题:
(1)能否像jar,不提供源码,只提供编译后的结果?
不行! 要求全部源码.
(2) 每个workspace下固定src,pkg,bin, 执行import时先查pkg,再查src?
不是! pkg只是编译后的静态库. 其与bin中的可执行命令是一样的意思.
(3) go build, go install的区别?
二者都执行编译连接, 只是后者还将应用保存到bin目录. 貌似有个bug, go build可以编译src下的go文件,但go install则要求必须有package.
(4) reposity与package有什么区别? package name与package path有什么区别?
reposity是相对于git或svn等版本控制工具的存储位置而言.
package是相对于$GOPATH/src的存储位置而言.
package path与package name更直接.
bin/
streak # command executable
todo # command executable
pkg/
linux_amd64/
code.google.com/p/goauth2/
oauth.a # package object
github.com/nf/todo/
task.a # package object
src/
code.google.com/p/goauth2/
.hg/ # mercurial repository metadata
oauth/
oauth.go # package source
oauth_test.go # test source
github.com/nf/
streak/
.git/ # git repository metadata
oauth.go # command source
streak.go # command source
todo/
.git/ # git repository metadata
task/
task.go # package source
todo.go # command source
----------------------------------------------------
Golang组织源码方式:
$GOPATH定义多个workspace, 每个workspace下固定src,pkg,bin. 可以将项目与第三方依赖放在二个不同的workspace,方便版本升级之类的操作.
How to develope go package:
package需要理解二个术语, package path, package name.
(1)前者是基于$GOPATH/src/的相对路径(相对路径不以/打头),
(2)后者是每个go file首行package语句定义的名字.
二者使用的情况不同:
(1)import语句与go tool工具都使用package path.
(2)代码引用使用package name.
这点对Java思维的人表示很不一般!
How to use go tool:
go help
go help [topic], 换成go [topic] --help也行.
查看go tool用法.