【问题标题】:Does a Go build include all project packages or only those used?Go 构建是否包含所有项目包或仅包含使用的项目包?
【发布时间】:2020-01-21 18:27:32
【问题描述】:

我正在学习 Go 以及如何构建一个合理复杂的 Go 项目。我似乎无法在以下问题上得到明确的答案。运行构建时,Go 会包含构建中的所有项目包,还是仅包含使用的那些?

示例:我正在开发一个框架,它在 /pkg 文件夹中有多个包。有些软件包用于管理目的,有些是非管理员的。非管理员服务将利用相关软件包来实现其功能,但不包括管理员服务。构建服务时,服务是否仅使用它从框架中使用的包构建?

谢谢!

【问题讨论】:

  • 这个answer 显示了构建可能因包引用而导致的一些潜在膨胀——即使没有使用包方法/类型。
  • 大部分膨胀是由于静态链接造成的。
  • “将在构建中包含所有项目包”,因为没有“项目”的概念,也没有“项目包”。这个问题很荒谬。

标签: go


【解决方案1】:

一个 go build 将只包含从 main 引用的包的传递闭包。在一个包中,它只包含使用的函数。对于带有方法的类型,如果使用了该类型,那么该类型的所有方法都将被包括在内。

【讨论】:

  • 如果我理解正确的话,如果两个包驻留在 /pkg 文件夹中并且 main.go 只引用其中一个包,另一个将不会包含在构建中?
  • 如果你构建主包,那么只会构建主包使用的那些包。所以,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多