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

随机推荐

  1. Error querying database. Cause: java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名

    今天调试程序是遇到了,下面的一个问题.我将对应的SQL语句拿到Toad下也能正常的执行,感觉有点莫名其妙,根据异常信息的提示查看对应的映射结果集也没发现错误,然后百度了一下,也有许多朋友也遇到过这样的 ...

  2. yii学习小结

    对yii框架搭建的平台运维过程中,会不断地发现很多新的特性和问题,现一一记录下来,便于后续学习~ 1.日志  在/runtime目录中    参考:http://www.cnblogs.com/you ...

  3. json对象与字符串互转

    javascript 1 JSON.parse() 方法用于将一个 JSON 字符串转换为对象. JSON.parse(text[, reviver]) text:必需, 一个有效的 JSON 字符串 ...

  4. html5文本框提示文字属性为placeholder

    html5文本框提示文字属性为placeholder 例子:  <textarea id="comment" class="commentCont"  n ...

  5. 在xargx命令中如何使用重定向

    ls *.txt | xargs -i -n 1 sh -c "cut -f 1-3 {} > ../{}"即可

  6. leetcode 101

    101. Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric aroun ...

  7. phalcon框架学习之router

    router定义 在DI中注册router的方法: $di->set('router', function(){ $router = new Phalcon\Mvc\Router(); $rou ...

  8. HTTP请求状态类

    <?php /** * 常用常量文件 * */ /** * HTTP协议请求状态 */ class HttpRequest { //100类 ----用于指定客户端应相应的某些动作---- co ...

  9. compareTo & toString

    public class UnAssignedRecord implements Comparable<UnAssignedRecord> { private String time; / ...

  10. C# MongoDB--时区问题(差了8小时)

    原因:MongoDB中存储的时间是标准时间UTC +0:00C#的驱动支持一个特性,将实体的时间属性上添加上这个特性并指时区就可以了.例如:[BsonDateTimeOptions(Kind = Da ...