为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在不使用点表示法的情况下引用导入的类型

是否可以在不使用点表示法的情况下引用导入的类型

Go
慕桂英3389331 2022-09-12 20:55:26
请考虑以下接口定义: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


查看完整回答
反对 回复 2022-09-12
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

可以使用类型别名。

type IRes = resources.IResource

与类型定义相反,别名只是同一类型的另一个名称,而不是新的非重复类型。类型定义将不使用 .=


查看完整回答
反对 回复 2022-09-12
  • 2 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信