接口查询,就是在一个接口变量中,去判断,那个把值赋给接口变量的对象,究竟有没有实现另一个接口,这个所谓的另一个接口,就是我要查询的那个接口。在这个已知的接口变量中,查询另一个接口的过程,就是接口查询了。
接口查询作用通过接口查询,我们可以 *** 作这个还原赋值给这个接口变量的对象的更加全面的功能。如赋值给这个接口变量的对象,实现了很多个接口,当他把值赋给这个接口后,那么这个接口变量就只能 *** 作这个接口定义的方法了,相当于这个对象的一些功能就丢失了。通过接口查询,我们来充分的挖掘这个对象的更多功能
接口查询代码实 ***package mainimport ( "fmt")type R interface { Read()}type W interface { Write(name string)}type RW interface { R W}type log struct { name []string r int}func (t *log) Read() { if len(t.name) > t.r { fmt.Println(t.name[t.r]) t.r++ } else { fmt.Println("empty") }}func (t *log) Write(name string) { t.name = append(t.name,name) fmt.Println("wirte success.",t.name)}func main() { var r R = &log{} var w W = &log{} w.Write("write first") w.Write("write second") r.Read() r.Read() val,ok := w.(RW) if !ok { fmt.Println("hi") } else { val.Read() val.Read() }}
上边代码中的R接口,定义了Read方法,W接口,定义了Write方法。RW接口通过组合R与W,相当于定义了Read方法与Write方法。
log类实现了上边的3个接口。在实例化log过程中,分别将值赋给R接口和W接口。那么问题就来了,R接口变量,只能访问Read方法,W接口变量,只能访问Write方法,也就是一个只能写进去,读不出来,一个只能读,但是没写入方法,读出来自然就是空值了。
下边通过接口查询,来充分发挥log对象的功能。
在W接口变量中,查询赋值给他的log对象,是否实现了RW接口,如果实现了,则返回一个RW接口变量,查询的语法也非常简单,如下所示:
val,ok := w.(RW)
如果能查询到ok为true,否则为false。
总结以上是内存溢出为你收集整理的golang中接口查询全部内容,希望文章能够帮你解决golang中接口查询所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)