对于Go来说是新手,并且大部分来自Java,对于我的项目,我一直将源文件放在多个子包中。例如:
myproject
├── subpkg1
│ ├── ...
│ └── y.go
├── subpkg2
│ ├── ...
│ └── z.go
├── ...
└── x.go
但是,这是有问题的,因为为了使子包与另一个子包进行接口,即使子组件被认为是整个项目的内部成员,后者也必须导出某些功能,类型等。如果该项目是某种类型的库,则只要用户导入(遵循上述示例)myproject/subpkg1
,内部功能就会向用户代码公开。
尽管存在上述缺点,上述方法是否仍被认为可以接受?如果没有,组织(大型)项目的惯用方式是什么?
除了我上面描述的方式之外,我还看到了另外两种方法:
将所有物品放入一个大包装中。这种方法很简单,但是最终您可能会在一个命名空间中得到成百上千个标识符(导出和未导出)。
编码/二进制标准软件包(可能还有其他软件包)采用了一种有趣的技术,即使用不相关值的哑变量来引入新的命名空间(特别是我指的是binary.BigEndian
和{{ 1}}变量)。这是一个好习惯吗?
我已经阅读但未回答我的问题的相关问题/文章: