草庐IT

interface-design

全部标签

go - 使用接口(interface)在 GO 中实现函数重载

我有一个“主类型”和一个“子类型”嵌入其中。主和子都实现了一个接口(interface)。当我将“主类型”变量分配给接口(interface)类型变量并使用该接口(interface)变量调用实现的方法时,它调用“主类型”实现而不是子类型的实现。我需要调用子类型实现。在GO中可以吗?我认为我的代码设计有问题。这里我给出一个示例代码来描述这个问题。packagemainimport"fmt"typeinterfinterface{typeCheck()}typemaintypestruct{subtype}typesubtypestruct{}func(maintype)typeChec

interface - 如何避免需要指针接收器的接口(interface)方法实现?

考虑以下示例:http://play.golang.org/p/eAot_sVwNDpackagemainimport"fmt"typeIncrementorinterface{Increment()}typeCounterstruct{iintIncrementor}func(c*Counter)Increment(){c.i++}funcmain(){varcIncrementorc=&Counter{}c.Increment()fmt.Println(c)}不幸的是,我需要c=&Counter{}因为Counter.Increment()实现有一个指针接收器,否则c.Increm

interface - 如何避免需要指针接收器的接口(interface)方法实现?

考虑以下示例:http://play.golang.org/p/eAot_sVwNDpackagemainimport"fmt"typeIncrementorinterface{Increment()}typeCounterstruct{iintIncrementor}func(c*Counter)Increment(){c.i++}funcmain(){varcIncrementorc=&Counter{}c.Increment()fmt.Println(c)}不幸的是,我需要c=&Counter{}因为Counter.Increment()实现有一个指针接收器,否则c.Increm

list - foo.Name undefined(类型接口(interface){}没有字段或方法名称)

我使用本地golang包“容器/列表”来管理堆栈中的inotify事件。当我访问堆栈的项目时,我的类型失败了(我认为)。import("golang.org/x/exp/inotify""container/list""log""fmt")funcmain(){stack:=list.New()watcher,err:=inotify.NewWatcher()iferr!=nil{log.Fatal(err)}err=watcher.Watch(os.Args[1])iferr!=nil{log.Fatal(err)}for{select{caseev:=当我转储ev变量时,对象类型是

list - foo.Name undefined(类型接口(interface){}没有字段或方法名称)

我使用本地golang包“容器/列表”来管理堆栈中的inotify事件。当我访问堆栈的项目时,我的类型失败了(我认为)。import("golang.org/x/exp/inotify""container/list""log""fmt")funcmain(){stack:=list.New()watcher,err:=inotify.NewWatcher()iferr!=nil{log.Fatal(err)}err=watcher.Watch(os.Args[1])iferr!=nil{log.Fatal(err)}for{select{caseev:=当我转储ev变量时,对象类型是

go - 接口(interface)没有用于结构中导出字段的字段或方法

我的代码具有以下结构://$GOPATH/experiments/interfaceexport/printer/printer.gopackageprinterimport"fmt"typeResourcePrinterinterface{PrintSomething()}typeJSONPrinterstruct{IsGenericbool}func(printer*JSONPrinter)PrintSomething(){fmt.Println("JSON")}//$GOPATH/experiments/interfaceexporter/printerretriever/pri

go - 接口(interface)没有用于结构中导出字段的字段或方法

我的代码具有以下结构://$GOPATH/experiments/interfaceexport/printer/printer.gopackageprinterimport"fmt"typeResourcePrinterinterface{PrintSomething()}typeJSONPrinterstruct{IsGenericbool}func(printer*JSONPrinter)PrintSomething(){fmt.Println("JSON")}//$GOPATH/experiments/interfaceexporter/printerretriever/pri

pointers - 为什么我不能使用指向需要 *interface{} 的特定类型的指针?

我有以下功能:funcbytesToData(datainterface{},b[]byte)error{buf:=bytes.NewBuffer(b)dec:=gob.NewDecoder(buf)returndec.Decode(data)}我用它来获取进出boltdb的结构数据。我想做的是将该签名更改为:funcbytesToData(data*interface{},b[]byte)error然后我希望能够像这样调用它(b在这种情况下是一个gob编码的Account)acc:=&Account{}err:=bytesToData(acc,b)但是当我这样做时,我收到了类似Can

pointers - 为什么我不能使用指向需要 *interface{} 的特定类型的指针?

我有以下功能:funcbytesToData(datainterface{},b[]byte)error{buf:=bytes.NewBuffer(b)dec:=gob.NewDecoder(buf)returndec.Decode(data)}我用它来获取进出boltdb的结构数据。我想做的是将该签名更改为:funcbytesToData(data*interface{},b[]byte)error然后我希望能够像这样调用它(b在这种情况下是一个gob编码的Account)acc:=&Account{}err:=bytesToData(acc,b)但是当我这样做时,我收到了类似Can

戈朗 : how is "func() interface {}" and "func() *MyStruct" incompatible types?

假设我有一段代码,其中一个函数接受另一个函数作为参数:typePersonstruct{Namestring}funcpersonBuilder()*Person{return&Person{Name:"John"}}funcprintRetrievedItem(callbackfunc()interface{}){fmt.Print(callback());}funcdoStuff(){printRetrievedItem(personBuilder);}这导致错误cannotusepersonBuilder(typefunc()*Person)astypefunc()interfa