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. CreateProcessW记录

    STARTUPINFO si = { sizeof(si) };  PROCESS_INFORMATION pi; si.dwFlags = STARTF_USESHOWWINDOW;  si.wSh ...

  2. java服务器

    WebLogic BEA公司开发的(被Oracle收购了)收费的 支持JavaEE所有的规范(ejb servlet/jsp规范) java  mysql(oracle)      2.WebSphe ...

  3. 可视化日志分析工具Gltail的安装与使用

    可视化日志分析工具Gltail的安装与使用      GlTail.rb 是一款带有浓郁的 Geek 风格的可视化日志分析工具,它采用 Ruby 技术构建,并利用 OpenGL 图形技术进行渲染,呈现 ...

  4. 设计模式-代理模式(Proxy)

    应用场景: 领导都有秘书,一般会代理领导的部分职能角色,处理签字.报销.开会等任务.很多新人可能都只知道秘书的存在,毕竟每天与其打交道,不知道领导的存在.但是领导的的确确是真实存在的. 场景说明: 代 ...

  5. iOS动画 三维透视投影 m34

    transform的结构如下:struct CATransform3D{  CGFloat m11, m12, m13, m14;  CGFloat m21, m22, m23, m24;  CGFl ...

  6. [原]NYOJ 括号匹配系列2,5

    本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...

  7. win7如何设置某个软件不弹出用户账户控制

    手动修改注册表: 在 HKEY_CURRENT_USERS\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 键下面 ...

  8. zend studio导入thinkphp的乱码问题

    刚刚导入thinkphp有乱码还有错误怎么办? windows -> preference -> Work space -> text file encodeing设置为 UTF-8 ...

  9. Kettle 合并记录报错!

    在Kettle的合并记录过程的时候,在“为了转换解除补丁开始 ”这一步的时候报错.具体错误如图所示: Kettle的转换如图所示: 问题原因:可能是你的数据库链接驱动和Kettle的版本不兼容. 解决 ...

  10. Thinkphp 获取当前url

    $_GET['_URL_'] 获取整个url,返回值是数组 $Think.MODULE_NAME 获取当前class的名称 $Think.ACTION_NAME 获取当前action的方法名称