合并或扩展接口?

3

我有两个接口:

type Request interface {
    Version() string
    Method() string
    Params() interface{}
    Id() interface{}
}

type Responder interface {
    NewSuccessResponse() Response
    NewErrorResponse() Response
}

我希望创建一个RequestResponder接口,将这两个接口结合起来。这是否可行?还是说我需要创建第三个包含6个函数的接口?


值得注意的是,接受一个单方法interface的API可以重写为接受函数类型。请参阅https://stackoverflow.com/a/63557675/12817546。 - user12817546
1个回答

7
接口嵌入是被允许的,正如规范所述:

接口类型T可以使用(可能限定)接口类型名E代替方法说明。这被称为将接口E嵌入到T中; 它将所有(公开和非公开)的E方法添加到接口T中。

这在Go标准库中被广泛应用(一个例子是io.ReadCloser)。
在你的问题中,RequestResponder应该构造为:
type RequestResponder interface {
    Request
    Responder
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接