【问题标题】:How to disable "use of internal package not allowed"如何禁用“不允许使用内部包”
【发布时间】:2016-12-09 12:42:09
【问题描述】:

我有一个 go 程序,它检查一个大型存储库,选择一些感兴趣的包,然后生成一个新的 main.go 文件,其中包含:

import(
  _ (package of interest here)
  _ (another package of interest here)
  ...
)
func main() {...}

主要对这些包在其init 方法中设置的一些值感兴趣。

但是其中一些包具有 (...)/internal/(...) 路径,因此在尝试运行生成的 main.go 时我会收到 use of internal package not allowed

是否有一些编译器/链接器/其他标志禁用internal 路径检查?

【问题讨论】:

  • 不,没有。您要么必须“手动”调用编译器 (go tool compile),要么移动这些包。
  • 一般来说,如果它们位于 /internal/ 子目录中,则意味着您要么使用的是添加供应商之前的库(Go 1.5/1.6),要么您不应该使用这些包.
  • Internal packages in Go的可能重复
  • “手动”重新调用编译器,我发现无法按原样使用 go build 库构建它。
  • 我已经能够通过修改cmd/go pkg 来做到这一点,删除所有使用disallowInternal

标签: go


【解决方案1】:

如果导入代码位于以“internal”目录的父级为根的树之外,则不允许导入包含“internal”元素的路径。没有例外机制。特别是,根据设计,没有允许其他包的白名单使用内部包的 ACL 机制。

Proposal for the rule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2012-06-14
    • 2013-05-23
    • 1970-01-01
    • 2018-05-25
    • 2019-10-02
    相关资源
    最近更新 更多