【Duke】构建可复用的模块(包)019 - PingPongGooo/GoFoundation GitHub Wiki

package

1. 基本复用模块单元
以首字母大写来表明可以被包外代码访问

2. 代码的package可以和所在的目录不一致
3. 同一目录里的Go代码的package要保持一致

package series

// 小写开头,包外不可访问。
func square(n int) int{
	return n * n
}

func GetFibonacciSerie(n int) []int  {
	ret := []int{1,1}
	for i := 2; i<n; i++{
		ret = append(ret, ret[i-2]+ret[i-1])
	}
	return ret
} 

package client

import (
	"GoFoundation/go_learn/ch15/series"
	"testing"
)

func  TestPackage(t *testing.T)  {
	series.GetFibonacciSerie(5)
}

src是gopath的一部分 写路径要从src 以后的目录结构 开始写起。

init 方法

在main被执行前,所有依赖的package 的 init 方法都会被执行
不同包的 init 函数按照包导入的依赖关系决定 执行顺序
每个包可以有多个init函数
包的每个源文件也可以有多个init函数,这点比较特殊

如何使用一个远程的package

go get -u github.com/easierway/concurrent_map

-u 代表每次都去拉远程的,最新的代码


package remote

import (
	cm "github.com/easierway/concurrent_map"
	"testing"
)

func TestConcurrenMap(t *testing.T)  {
	m := cm.CreateConcurrentMap(99)
	m.Set(cm.StrKey("key"),10)
	t.Log(m.Get(cm.StrKey("key")))

}

package

1. 通过go get 来获取远程依赖
go get -u 强制从网络更新远程依赖

2.注意代码在Github上的组织形式,以适应go get
直接以代码路径开始,不要有src

go真的是 好简洁