首页 > 技术文章 > go again

zolo 2016-09-07 13:32 原文

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用法.

推荐阅读