标准目录为src、bin、pkg三个目录。
GOPATH可以指定几个目录,排在列表最前面的比当前工作空间优先级更高。go get默认会下载到第一个工作空间里面。备注:unix-like使用冒号分隔,windows使用;分割。
GOROOT指定工具链和标准库的存放位置。
导入包
如果是系统级的包的导入
import "net/http"
import osx "github.com/apple/osx/lib"
import _ "github.com/qyuhen/test"
import "../lib" // 相对路径引入
组织结构
包由一个或多个保存在同一目录下的源文件组成。
包名和目录名称并无关系,不要求保持一致,举个例子,leaf里面的go的库。目录名为go,但是里面的包使用的名称为g。不影响使用,在import的时候是写go,语句里面写g。
"github.com/name5566/leaf/go"
d := g.New(10)
同一目录下的包名需要完全一致。下列有几个特殊的包名:
main :可执行入口
all: 标准库以及 GOPATH中能找到的所有包。
std,cmd:标准库工具链
documentations:存储文档信息、无法导入。
权限
包内成员可以互相访问。只有大写字母的能被包外访问。当然也能通过unsafe.Pointer方式来反出数据并且调用。
初始化
func init() {
}
内部包
将内部模块分离出来,单独包的形式维护。只能被父目录下的包访问,命名为internal目录下的包。
依赖管理
主要是解决三方依赖库文件冲突问题。这个概念是和内部包刚好相反,vendor目录是提供给当前工作目录,通用的目录。
注意:vendor比标准库有嫌隙更高。