【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真的是 好简洁