Go 内部和 pkg 包共享相同的名称

Lor*_*olo 1 package go

我是一个新手,我一直在努力理解文件结构和包方面的最佳实践。

据我所知,该internal文件夹包含客户端无法使用的代码,而该pkg文件夹包含可以在外部使用的代码。假设我有一个资源,它有一些内部实现,并且还有一些可以在外部使用的功能。我会像这样在两个文件夹下都有同名的包吗?

- my-app
  - pkg
   - accounts
     - accounts.go (package accounts)
  - internal
   - accounts
     - accounts.go (package accounts)
Run Code Online (Sandbox Code Playgroud)

然后当我导入时我指定"app/my-app/internal/accounts""app/my-app/pkg/accounts"取决于我想要导入的模块?如何处理同名的内部和外部包?

小智 5

Go 命令文档本设计文档中描述了内部包。

外部可导入的包可以位于除internal文件夹之外的任何文件夹中。没有要求也没有广泛同意这些包应该位于pkg文件夹中的约定。

应用程序可以通过在导入规范中指定包名称来解决同名包之间的冲突:

import (
    iaccounts "my-app/internal/accounts"
    accounts "my-app/accounts"
)
Run Code Online (Sandbox Code Playgroud)

用于iaccounts指内部包装和accounts指常规包装。