如何在Go中导入内部包?
import (
"runtime/internal/atomic"
"runtime/internal/sys"
)
像这样没有出错:
导入runtime / internal / atomic:不允许使用内部包
并在主包中使用内部函数?
答案 0 :(得分:16)
Go鼓励将程序结构化为使用导出API进行交互的包的集合。但是,可以导入所有包。这在实现库或命令时会产生张力:它可能会变得足够大以构建为多个包,但是拆分它会将这些附加包中使用的API导出到世界。能够制造能见度有限的包装将消除这种紧张局势。
如果导入代码位于以“internal”目录的父级为根的树之外,则不允许导入包含元素“internal”的路径。
你不能(至少很容易),你不应该。
答案 1 :(得分:3)
我将向您展示我如何使用内部nettest包:
// I copied nettest to vendor with `dep ensure` I think. Then:
mkdir vendor-local
cp -r vendor/golang.org/x/net/internal/nettest ./vendor-local/nettest
vim ./vendor-local/nettest/stack.go and remove import comment // import "foo" [1]
// Use full import in your go file:
import "github.com/foo-user/bar-project/vendor-local/nettest"
您可以在内部包中找到包含grep -r "// import" ./vendor-local/nettest
您可以,但dep ensure
等不支持本地软件包的工具会清除您的副本。