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. Messenger 弹窗的使用

    关于Messenger 弹窗的文档及详细的说明请参考 Messenger官网,这时只介绍 Messenger 弹窗的使用  messenger依赖与jquery和Backbone.js,可以和  Bo ...

  2. php添加环境变量

    在php的安装目录中添加,如/usr/php-5.6.16添加env.php文件,在文件中设置环境变量: 如:<?php$_SERVER['ENV'] = 'production'; 再到配置文 ...

  3. 内存泄漏检测工具Valgrind

    1概述 1.1 介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(fram ...

  4. Datatable导出Excel

    ; IRow headerRow = sheet.CreateRow(); ; ; ; iRowIndex++; } ; i < icolIndex; i++) { sheet.AutoSize ...

  5. php xml 互相转换

    正好昨天才做过类似的需求……几行代码就可以搞定. 如果你使用 curl 获取的 xml data$xml = simplexml_load_string($data);$data['tk'] = js ...

  6. 从Git仓库中恢复已删除的分支、文件或丢失的commit

    亲测可用 因为自己 commit 并且 push 后 因为冲突 提交不了,不小心做了 rebase 代码被 覆盖 用以下命令 还原: 查看所有日志 并记下 hash 值 git reflog 然后用: ...

  7. Large-Scale Named Entity Disambiguation Based on Wikipedia Data

    Large-Scale Named Entity Disambiguation Based on Wikipedia Data 基于维基百科数据的大规模命名实体消岐 1.引言 1.1. 概念 实体(e ...

  8. 如何实现Android 中断线程的处理

    我现在对一个用户注册的功能1.用ProgressDialog将当前页面设成不可操作(保留返回键 退出ProgressDialog)2.用一个线程clientThread执行数据的提交和返回 问题:考虑 ...

  9. Django搭建及源码分析(三)---+uWSGI+nginx

    每个框架或者应用都是为了解决某些问题才出现旦生的,没有一个事物是可以解决所有问题的.如果觉得某个框架或者应用使用很不方便,那么很有可能就是你没有将其使用到正确的地方,没有按开发者的设计初衷来使用它,当 ...

  10. iOS中UIKit——UIDataDetectors(数据检测器)它将电话、邮件、网址等变为链接

    1.它用于UITextView和UIWebView,属性名为:dataDetetorTypes 2.此属性可以设定使符合电话.邮件.网址.符合格式的日期等文字变为链接文字. 3.电话号码点击后拨出电话 ...