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. mjrefresh源码分析

    最近想自己写个下拉刷新的库,但是始终感觉无从下手,想想总是容易的.原理也很简单,真正要下手写的时候,呵呵.不得不说ios封装得很好,网上可以用的成熟的库也很多,也正是因为如此很多开发者也忽略了很多底层 ...

  2. C++异常:no matching function for call to "Matrix(Matrix&)"

    C++异常:no matching function for call to "Matrix(Matrix&)" 我定义了一个类叫Matrix,其中构造函数explicit ...

  3. centos custom iso

    http://www.smorgasbork.com/2012/01/04/building-a-custom-centos-6-kickstart-disc-part-1/ Create a dir ...

  4. java 通用的返回类

    package com.eshore.pdip.mobile.phone.vo; import java.io.Serializable; import java.util.HashMap; impo ...

  5. 百度地图API示例之小实践 添加代理商标注

    地图坐标无非是经度纬度. 每个代理商都有他的经度纬度参数,就能够在地图上标注出来了. 效果如下: 功能包括 标记代理商 显示导航 显示距离 测量距离 点击选中等 其中测距用到的是自定义控件 地图根据城 ...

  6. What is the behavior of lnk files?

    I access a files which name is "abc.doc", no doubt a lnk file "abc.doc.lnk" show ...

  7. hdu1203

    #include <stdio.h> #include <math.h> #define mmin(x,y) (x)<(y)?(x):(y) int main(){ +] ...

  8. 远程DLL注入

    界面如下: 关键部分代码如下: void CInjectDllDlg::OnBnClickedButtonInject() { // TODO: 在此添加控件通知处理程序代码 UpdateData(T ...

  9. CentOS 6.x版本升级Mysql

    首先确定一下自己的DNS  vi /etc/resolv.conf    我一般为114.114.114.114 #-----------------------------CentOS 6.x版本升 ...

  10. 详解Oracle临时表的几种用法及意义

    Oracle临时表可以说是提高数据库处理性能的好方法,在没有必要存储时,只存储在Oracle临时表空间中.希望本文能对大家有所帮助. 1 .前言 Oracle Logo 目前所有使用 Oracle 作 ...