当设计一个新的包时,新手Go程序员总是先创建一套接口,然后再定义一些满足它们的具体类型。这种方式的结果就是有很多的接口,它们中的每一个仅只有一个实现。不要再这么做了。这种接口是不必要的抽象;它们也有一个运行时损耗。你可以使用导出机制(§6.6)来限制一个类型的方法或一个结构体的字段是否在包外可见。接口只有当有两个或两个以上的具体类型必须以相同的方式进行处理时才需要。
当一个接口只被一个单一的具体类型实现时有一个例外,就是由于它的依赖,这个具体类型不能和这个接口存在在一个相同的包中。这种情况下,一个接口是解耦这两个包的一个好方式。
请问可不可以举个例子,什么时候一个接口只有一个实现类型但是又是合理的?什么是依赖?
改成下面可能更清楚:
We make an exception to this rule when an interface is satisfied by a single concrete type but
that type cannot live in the same package `where the type(interface) is needed` because of their dependencies. In that
case, an interface is a good way to decouple two packages.
package A
import "B"
//import "C"
type TA int
FuncA(o *B.ClassB) {
o.Hello()
}
/*应当用这个来解耦A和B的相互依赖
FuncA(o C.InterfaceHello) {
o.Hello()
}*/
package B
import "A"
var ta A.TA = 0
type ClassB struct {
}
func(self *ClassB) Hello() {
}
func test() {
o := &ClassB{}
A.FuncA(o)
}
package C
type InterfaceHello interface {
Hello()
}
#5
更多评论
原文在此
![1.png](https://static.studygolang.com/180619/b8b11e7d0945c29ee951422131dc7192.png)
同问~~
#1