假设有一个第三方软件包使接口可用:
package giantpackage
type UselessInfo struct {
wontUse string
alsoWontUse string
}
type CoolInterface interface {
DoSomethingAwesome(ui UselessInfo) (string, error)
}
Run Code Online (Sandbox Code Playgroud)
这样做似乎很容易实现:
package main
import giantpackage
type Jedi struct {
name string
age int
}
func (j Jedi) DoSomethingAwesome(ui giantpackage.UselessInfo) (string, error)
return "Hello world.", nil
}
Run Code Online (Sandbox Code Playgroud)
假设:
1)我实际上并没有在DoSomethingAwesome函数中使用UselessInfo结构.
2)我必须导入的包是巨大的.
3)我必须导入的包不再维护,不能修改.
我的问题:
有没有办法在不导入Giantpackage的情况下实现CoolInterface?
那没有.
要实现giantpackage.CoolInterface,您的类型必须有一个方法:
DoSomethingAwesome(giantpackage.UselessInfo) (string, error)
Run Code Online (Sandbox Code Playgroud)
要有一个匹配此签名的方法,您必须导入giantpackage,否则使用任何其他类型的参数,它将不匹配所需的方法.
在您的评论中,您表示您计划创建一个库,并且提供此接口的实现对于您库的某些用户来说将是一个"很好的"功能.
那么推荐的方法是创建库的"核心"包,它不会不包含此接口的实现,因此不依赖giantpackage.您的库中不需要此功能的用户只会导入您的"核心"软件包,因此他们也不会依赖giantpackage.
创建库的另一个"扩展"包,其中包含此接口的实现(如果需要,也可以使用"核心"包).需要它的用户也可以导入此包.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |