Inheritance 一组约束和继承的Go接口

Inheritance 一组约束和继承的Go接口,inheritance,interface,go,Inheritance,Interface,Go,我仍在努力理解Golang接口。请纠正我并帮助我理解 Frances Campoy解释说,接口是一组约束 在我的例子中,假设我有一个Store接口,与contains接口,比如Go中的sortinterface type Store interface { Earning() int Expense() int } 那么,如果我想对其他包(如StoreA,StoreB)实现此接口约束,我必须做什么?我想在我尝试时得到这样的信息: aa := StoreC{} aa.Add("A

我仍在努力理解Golang接口。请纠正我并帮助我理解

Frances Campoy解释说,
接口
是一组约束

在我的例子中,假设我有一个
Store
接口,与contains接口,比如Go中的sort
interface

type Store interface {
    Earning() int
    Expense() int
}
那么,如果我想对其他包(如
StoreA
StoreB
)实现此接口约束,我必须做什么?我想在我尝试时得到这样的信息:

aa := StoreC{}
aa.Add("AAA")
// error saying `StoreC` does not implement method `Add`, constrained by interface `Store`... something
那么,如果我想在其他
Store
s中强制执行此约束,我该怎么办?我需要做像继承这样的事情吗

type StoreC interface {
    Store
}
换句话说,我想知道如何将
包排序
的3个方法的接口强制到Go中的每个
排序
操作。它如何对Go中任何其他可能的
sort
使用强制执行约束


谢谢

对于界面的用户来说,界面最有用。通过查看接口提供的方法,您知道可以安全使用哪些方法

如果您有一个接口:

type MyInterface interface {
   Frob(int)
   Flanged() bool
}
您知道,任何函数
func-foo(thing-MyInterface)
都可以安全地调用
thing.Frob(…)
thing.franged()

任何同时实现
func(ra类型)Frob(int)
func(ra类型)bool
的类型都将满足该接口。编译器将在编译时执行此检查

定义方法(大致)如下所示:

func (reciever a_type) methodname (possibly more args here) possibly_a_return_type {...}

接收方的类型是为其定义方法的类型。方法的名称介于两者之间,然后是参数列表(可能是空的)。

只需在方法调用或某个地方使用希望成为
存储的每个
struct
。你通常在普通的编码过程中这样做——如果你不这样做,因为你把它作为一个代码>接口{} /代码>说,考虑改变它。如果需要强制将某个结构用作某个接口类型,请在顶层执行
var=iFace((*structType)(nil))
。谢谢!那么约束的范围是什么?我的意思是约束是否适用于其他包?如果不是我如何处理其他包的话,我想你在寻找一种明确的、声明的“implements”关系,从语法上讲,Go没有这种关系。接口约束仅在使用类型时强制执行。
var\uu
技巧只是一种在代码还没有使用某个类型的情况下强制使用该类型的方法。试试看——希望这能有所帮助。值得注意的是,采用一种方法
接口的API可以重新编写为采用函数类型。看,谢谢!那么
任何类型的
在哪里?它必须在同一个包裹里吗?这并不是因为我们在Go中有
sort
全局接口,所以必须实现更少的、len,。。。排序方法。假设我想实现我自己的接口,那么这个接口的应用范围是什么。。。谢谢@cvxv31431asdas我不确定我是否理解您的问题。如果您想要定义一个类型来实现接口,只需实现所需的方法9,它就会突然满足接口的要求。如果要定义接口,请告诉编译器需要哪些方法。