戈朗。从包中只导入一个文件
Posted
技术标签:
【中文标题】戈朗。从包中只导入一个文件【英文标题】:Golang. Import only one file from package 【发布时间】:2017-03-31 19:23:44 【问题描述】:大家好。我是 GO 新手,需要一些帮助。我有一个具有这种结构的项目
但是让我们假设我的逻辑包中有 100500 个项目。如果我只需要为特定包导入一两个文件怎么办。我可以这样做还是只能导入一个完整的包?
【问题讨论】:
可能只有我一个人,但如果你在一个包中包含数百万个东西,那么是时候重构了。 这只是一个例子。但如果我有 10 个 - 这还不错。但是这十个中的每一个都有一些针对 500 个字符串的大算法 【参考方案1】:不,在 Go 中,您导入的是包,而不是文件。但是,编译器通常只包含已编译的二进制函数和实际引用的类型,因此即使您在导入中包含 massive 包(无论如何不鼓励),它们通常也不会包含在最终的二进制文件,除非需要。
正如 RayfenWindspear 所指出的,如果一个包足够大,以至于您只想导入一两个文件,那么这可能是一个非常好的气味测试,您需要重构该包。
【讨论】:
谢谢伙计。我不知道你告诉的“编译器通常只包含在编译的二进制函数和类型中实际引用”。 只是为了添加到@kaedys,假设您想将您的包/应用程序分解为几个文件以提高可读性,例如一个文件 file-operations.go 包含所有结构、与文件操作相关的类型、服务器。 go处理服务器,main.go存放main函数,把所有文件放在包目录下,命名为你的包名,go会自动编译。 我不确定给定的编译器优化 - 它似乎包含每个引用包中的所有内容。我认为它不会比这更精细。我没有阅读编译器/链接器源代码,这只是我从使用中得到的印象。 只是为了补充这个一般的包装建议。确保不引入循环依赖。例如您可以从myapp
到 import "myapp/pack"
,反之亦然,但不能同时使用这两种方式。
或任何其他会创建循环的方式,例如a -> b -> c -> a
。【参考方案2】:
我意识到这个问题在很大程度上已经得到解答。但无论如何,这是我的想法。
如果特定文件可以独立于包的其余部分工作,或者通过一些小的修改来实现,您只需将这些文件复制到您想要使用它们的项目中即可。然后直接引用函数/方法/等。但是,如果您在各种项目中使用大包的一部分,那么将它分解成更小的包肯定会更合适。然后,您可以在任意数量的项目中独立使用这些部件,而不会产生过多的负担。
【讨论】:
以上是关于戈朗。从包中只导入一个文件的主要内容,如果未能解决你的问题,请参考以下文章
如何让 React Native 仅在 Android 操作系统上从包中获取/导入功能