如何在golang的界面中添加新方法

如何在golang的界面中添加新方法,go,Go,我有一个golang接口I type I interface { A() B() } 此接口是类型S struct的元素。现在,我想向这个接口添加一个函数C(),它将被称为S类型的对象。 但是这个接口是由许多其他类型(例如:T)实现的。 编译时,我得到一个错误,因为T没有实现C() 解决方法之一是在T中添加一个C()的虚拟实现,它只返回T的返回类型的值 有更好的方法吗?您可以用一个结构实现多个接口,如下所示。然后,您将让方法接受不同的接口作为参数 如果您需要使用两个接口的方法的

我有一个golang接口I

type I interface {
    A()
    B()
}
此接口是
类型S struct
的元素。现在,我想向这个接口添加一个函数C(),它将被称为S类型的对象。 但是这个接口是由许多其他类型(例如:T)实现的。 编译时,我得到一个错误,因为
T没有实现C()

解决方法之一是在T中添加一个C()的虚拟实现,它只返回T的返回类型的值


有更好的方法吗?

您可以用一个结构实现多个接口,如下所示。然后,您将让方法接受不同的接口作为参数

如果您需要使用两个接口的方法的单个函数,您可以将指向结构的指针作为单独的参数传递(每个接口一个参数)但是没有什么可以阻止一个接口满足多个范围较小的接口,因此您可以创建第三个接口,它封装了这两个接口的功能来处理这些情况(参见IJ接口示例)


您可以用一个结构实现多个接口,如下所示。然后,您将让方法接受不同的接口作为参数

如果您需要使用两个接口的方法的单个函数,您可以将指向结构的指针作为单独的参数传递(每个接口一个参数)但是没有什么可以阻止一个接口满足多个范围较小的接口,因此您可以创建第三个接口,它封装了这两个接口的功能来处理这些情况(参见IJ接口示例)


只需使用新方法创建单独的界面只需使用新方法创建单独的界面
package main

import (
    "fmt"
)

type I interface {
    A()
    B()
}

// interface 'J' could be defined in an external package, it doesn't matter
type J interface {
    C()
}

// encapsulate I & J interfaces as IJ
type IJ interface {
    J
    I
}

// S will satisfy interfaces I, J & IJ
type S struct {}

func (s *S) A(){
    fmt.Println("A")
}

func (s *S) B(){
    fmt.Println("B")
}

func (s *S) C(){
    fmt.Println("C")
}


func main() {
    s := &S{}
    doWithI(s)
    doWithJ(s)
    fmt.Println("===================================")
    doWithIAndJ(s)
}

func doWithI(in I){
    in.A()
    in.B()
}

func doWithJ(in J){
    in.C()
}

func doWithIAndJ(in IJ){
    in.A()
    in.B()
    in.C()
}