请考虑以下接口定义:package reposimport ( resources "unit/pkg/resources")type IRepo interface { fetch(int32) (resources.IResource, error) update(resources.IResource) (resources.IResource, error) new() resources.IResource create(resources.IResource) (resources.IResource, error) delete(int32) error}有没有办法“使用”导入的包(在C++命名空间的意义上),这样我就不需要每次引用其中一种类型(IResource)(TBH - 这可能只是意味着属于包而不是IResourcereposresources)
2 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
您可以在导入声明的前面加上名称,以导入其所有标识符:.
package repos
import (
. "unit/pkg/resources"
)
但是,几乎从来都不是合适的解决方案。如果将来向包中添加新标识符,它们可能会与包中的现有标识符发生冲突并破坏生成。import .resourcesrepos
此外,包名称与类型名称冗余的事实可能表明包或该包中的类型应该具有更好的名称(有关更多详细信息,请参阅包名称博客文章)。
在这种情况下,也许 和 之间的抽象边界弊大于利。您在这里处理哪些资源?是否可以将该类型移到某个更高级别的包中?resourcesreposResource
最后,我要指出的是,界面似乎非常大,可能不合适。Go 接口(与 Java 接口不同)通常属于使用接口的 API,而不是提供该接口实现的 API。IRepo
30秒到达战场
TA贡献1828条经验 获得超6个赞
可以使用类型别名。
type IRes = resources.IResource
与类型定义相反,别名只是同一类型的另一个名称,而不是新的非重复类型。类型定义将不使用 .=
- 2 回答
- 0 关注
- 72 浏览
添加回答
举报
0/150
提交
取消