假设我有一个接口(interface)Key,它有一个方法Hash()int,我想在Go的集合结构中使用它。我希望能够在我的集合中做一些事情,例如(c*Collection)Set(keyKey,valueValue)。我希望我的集合能够以预先声明的类型为键,例如typeIntKeyint,这样我就可以在实现(kIntKey)Hash()整数。这是可能的,还是我需要将IntKey声明为结构? 最佳答案 任何(非内置)类型都可以满足接口(interface),因此:typeIntKeyintfunc(kIntKey)Hash()int
在Go中,你不需要声明你需要实现一个接口(interface),你只是去做(它被称为“结构化类型”,类似于动态语言中的“鸭子类型”)。如果你想强制一个类型实现一个接口(interface)怎么办(比如当你在C#或Java中“继承”一个接口(interface)时)?换句话说,如果忘记实现接口(interface)(或签名错误)是一个错误并且您想及早发现该错误怎么办。最好的方法是什么? 最佳答案 你可能做的最好的事情就是尝试将类型的实例分配给接口(interface)变量例如,您要确保类型A实现了Stringer接口(interfac
如何调用具有以下签名的方法SomeFunc(args...interface{})使用[]interface{}类型的变量是否可以调用上述方法?如果是怎么办?谢谢 最佳答案 funcmain(){b:=[]interface{}{"hello","Hi"}SomeFunc(b...)}通过在b数组后使用...解决了这个问题。更多详情请参阅Unpackingsliceofslices和GolangJoinarrayinterface 关于go-当你有接口(interface)数组时,如何调
为什么我要为接口(interface)由指针赋值的类型断言结果赋值,而当我为由结构对象赋值的接口(interface)赋值时出现“无法赋值”错误?这是我的代码:packagemainimport("fmt")typePersoninterface{SayHi()}typeStudentstruct{idintnamestring}func(sStudent)SayHi(){fmt.Println("hi,iam",s.name,"myidis:",s.id)}funcmain(){p1:=Person(&Student{id:123,name:"William"})p1.SayHi()
来自Java领域的新Gopher。假设我有一些通用的存储接口(interface):packagerepositoriestypeRepositoryinterface{Get(keystring)stringSave(keystring)string}我通过在单独的包中实现此接口(interface)来支持多个不同的后端(Redis、Boltdb等)。但是,每个实现都有需要传入的唯一配置值。所以我在每个包中定义了一个构造函数,例如:packageredistypeConfigstruct{...}funcNew(config*Config)*RedisRepository{...}和
这个问题在这里已经有了答案:Meaningofastructwithembeddedanonymousinterface?(7个答案)关闭5年前。我在Go中遇到了这段代码:typeMytypestruct{Interfacenamevar1ClientInterface1var2ClientInterface2idint}第一个字段是什么意思?
https://play.golang.org/p/LHkVGzmC7N看看这个来源。特别是这个废料:bw:=NewWriter(b)w,ok:=bw.wr.(io.ReaderFrom)不明白b是bytes元素,NewWrite()取一个io.Writer。和bw.wr.(io.ReaderFrom),怎么用?“.(io.ReaderFrom)”的函数是什么意思?和fmt.Println(w.ReadFrom(s))w是io.write,在io/io.go中ReadFrom(s)是接口(interface)。typeReaderFrominterface{ReadFrom(rRead
我刚刚通过TourofGo学习golang语言,我到达了Stringer部分。(https://tour.golang.org/methods/17)我试图理解它是如何工作的,所以我尝试了它。它没有用。代码:packagemainimport("fmt")typeIintfunc(iI)String()string{returnfmt.Sprintf("%v",i)}funcmain(){i:=I(10)fmt.Println(i)}当我运行示例时出现错误,我不太明白问题是什么。我的理论是使用String()方法:当我运行打印机代码时,程序会查找stringer方法,如果存在则运行它。
在一个包中我有一个接口(interface)Repository有一个方法GetReporter返回一个接口(interface)Reporter.这是由一个函数使用Execute这需要Repository并得到它的Reporter通过GetReporter功能。在另一个包中我有一个结构GithubRepository有一个方法GetReporter返回GithubReporter.在第三个包中,我想调用Execute使用GithubRepository在包#1外运行实例。我正在尝试让包1和包2彼此独立,而不是从另一个导入某些东西。第三个包应该结合前两个。Golang返回:cannot
我不确定如何正确地表述问题。我有2个go代码片段,它们应该做完全相同的事情,但显然它们没有,因为一个工作,另一个不工作(不编译)funcwriteSomething(writer*io.Writer){}funcmain(){file,_:=os.Create("error.log")varlogWriterio.Writer=filewriteSomething(&logWriter)}funcmain2(){file,_:=os.Create("error.log")writeSomething(&file)}Playgroundmain()有效而main2()无效。prog.go