草庐IT

INTERFACE

全部标签

go - 强制 Go 类型实现接口(interface)

在Go中,你不需要声明你需要实现一个接口(interface),你只是去做(它被称为“结构化类型”,类似于动态语言中的“鸭子类型”)。如果你想强制一个类型实现一个接口(interface)怎么办(比如当你在C#或Java中“继承”一个接口(interface)时)?换句话说,如果忘记实现接口(interface)(或签名错误)是一个错误并且您想及早发现该错误怎么办。最好的方法是什么? 最佳答案 你可能做的最好的事情就是尝试将类型的实例分配给接口(interface)变量例如,您要确保类型A实现了Stringer接口(interfac

go - 当你有接口(interface)数组时,如何调用带有变体接口(interface)的方法?

如何调用具有以下签名的方法SomeFunc(args...interface{})使用[]interface{}类型的变量是否可以调用上述方法?如果是怎么办?谢谢 最佳答案 funcmain(){b:=[]interface{}{"hello","Hi"}SomeFunc(b...)}通过在b数组后使用...解决了这个问题。更多详情请参阅Unpackingsliceofslices和GolangJoinarrayinterface 关于go-当你有接口(interface)数组时,如何调

go - 在 Go 中获得不同但相似类型的类似数组行为的最佳方法?

场景:我有几个不同的客户端,每个客户端都与不同的API交互。这些客户端的数据字段是一样的:typeclientXstruct{keystringsecretstringclient*http.Client}然而,这些客户端各自有许多方法(彼此各不相同):func(c*ClientX)someMethod()(*ResponseType,error){//code}客户端的数量可能会随着时间的推移而变化,因为添加了对新API的支持,或者一些API下线了。因此,主包中的所有函数都需要模块化和适应性,以接受可变数量的客户端作为参数。解决这个问题的最佳方法是什么?我不能将客户端放在一个数组中,

pointers - golang 类型断言,接口(interface){}(指针)和接口(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()

go - 根据动态配置值实例化接口(interface)实现

来自Java领域的新Gopher。假设我有一些通用的存储接口(interface):packagerepositoriestypeRepositoryinterface{Get(keystring)stringSave(keystring)string}我通过在单独的包中实现此接口(interface)来支持多个不同的后端(Redis、Boltdb等)。但是,每个实现都有需要传入的唯一配置值。所以我在每个包中定义了一个构造函数,例如:packageredistypeConfigstruct{...}funcNew(config*Config)*RedisRepository{...}和

go - struct第一行只是一个接口(interface),什么意思?

这个问题在这里已经有了答案:Meaningofastructwithembeddedanonymousinterface?(7个答案)关闭5年前。我在Go中遇到了这段代码:typeMytypestruct{Interfacenamevar1ClientInterface1var2ClientInterface2idint}第一个字段是什么意思?

go - 如何定义适用于 golang 中任何函数的函数类型

我只想定义一个匹配所有函数的函数类型,我试过这个:类型funcTypefunc(...interface{})...interface{}但失败了我该怎么做? 最佳答案 没有与任何函数兼容的函数类型。您能做的最好的事情是接口(interface){},任何值都可以分配给它,包括函数。 关于go-如何定义适用于golang中任何函数的函数类型,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

go - 如何解释这个程序实现接口(interface)

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

go - 是否可以在 Golang 类型断言中使用反射数组类型?

我需要检查interface{}是否为数组,如果是则创建相应的slice。不幸的是,我事先不知道数组长度。例如:import("reflect")funcAnythingToSlice(ainterface{})[]interface{}{rt:=reflect.TypeOf(a)switchrt.Kind(){casereflect.Slice:slice,ok:=a.([]interface{})ifok{returnslice}//itworkscasereflect.Array://returna[:]//itdoesn'twork:cannotslicea(typeinter

go - 将值设置为继承字段

在这里看我的代码packagemainimport("fmt")typeiFormatterinterface{SetName(namestring)Format()string}typeBaseFormatterstruct{namestring}typeFormatterstruct{BaseFormatter}func(fFormatter)SetName(namestring){f.name=name}func(fFormatter)Format()string{return"formatted"+f.name}funcmain(){varformatters=[]iForma