猿问

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

请考虑以下接口定义:


package repos


import (

  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)


慕桂英3389331
浏览 73回答 2
2回答

慕无忌1623718

您可以在导入声明的前面加上名称,以导入其所有标识符:.package reposimport (  . "unit/pkg/resources")但是,几乎从来都不是合适的解决方案。如果将来向包中添加新标识符,它们可能会与包中的现有标识符发生冲突并破坏生成。import .resourcesrepos此外,包名称与类型名称冗余的事实可能表明包或该包中的类型应该具有更好的名称(有关更多详细信息,请参阅包名称博客文章)。在这种情况下,也许 和 之间的抽象边界弊大于利。您在这里处理哪些资源?是否可以将该类型移到某个更高级别的包中?resourcesreposResource最后,我要指出的是,界面似乎非常大,可能不合适。Go 接口(与 Java 接口不同)通常属于使用接口的 API,而不是提供该接口实现的 API。IRepo

30秒到达战场

可以使用类型别名。type IRes = resources.IResource与类型定义相反,别名只是同一类型的另一个名称,而不是新的非重复类型。类型定义将不使用 .=
随时随地看视频慕课网APP

相关分类

Go
我要回答