go - 实现和扩展来自不同包的接口

我想知道,是否可以扩展现有的接口?有一个简单的代码片段不起作用。
包主

import (
    "fmt"
    "io"
)

type Aaa struct {}

// Implementing io.ReaderAt interface
func (a Aaa)ReadAt(p []byte, off int64) (n int, err error) {
    return
}

// Extending it
func (a *Aaa) A() {
    fmt.Println("A")
}

func main() {
    list := [1]io.ReaderAt{Aaa{}} // Use Aaa object as io.ReaderAt type
    list[0].A() //Trying to use an extended type. << Error occurred here
}

列表[0]。未定义(类型IO.readerat没有字段或方法A)
这是一种告诉我不能实现来自不同包的接口的方法吗?

最佳答案

它只告诉您,io.ReaderAt没有A()方法。
需要类型断言才能从*Aaa中获取io.ReaderAt

a := io.ReaderAt(&Aaa{})
if a, ok := a.(*Aaa); ok {
    a.A()
}

接口不需要在任何特定的地方定义,因此如果您的代码需要使用这些方法的ReaderAtA,您可以自己定义它,并且任何ReaderAtA值也将是一个io.ReaderAt
type ReaderAtA interface {
    io.ReaderAt
    A()
}


a := ReaderAtA(&Aaa{})
a.A()

https://play.golang.org/p/0bl5djJ0im

本文翻译自 https://stackoverflow.com/questions/40682578/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 go methods interface django-inheritance


相关文章:

go - 去构建失败,致命错误:rocksdb / c.h

javascript - JavaScript中的方法重载

tomcat - 在Jersey的Tomcat启动中调用方法

java - 需要两个输入并拆分队列的方法

java - 当“ B”扩展为“ A”时,为什么要实现接口“ A”和“ B”

java - 抽象类的简单Q迭代器<Object E>

go - 通过gzip将命令输出到Reader

go - 拆分客户端/服务器代码

inheritance - 如何组织此Go代码,从嵌入式类型重新定义方法,以减少冗余和更易维护?

java - 如何实现具有泛型类型的接口?