golang - interface的作用

多态。struct 可以赋值给 interface。interface 可以转换成子接口,或者 struct。

请看go中的一段的源代码:

listener, _ := net.Listen("tcp", "localhost:8000")
tcpListener := listener.(*net.TCPListener)
conn,_ := tcpListener.Accept()

仔细拜读源码可知:

net.Listen() 返回了一个 Listener接口,而 *TCPListener本身实现了该接口,所以可以转换成 TCPListener,再调用其Accept()。

实际上,并没有必要显示地转换:

listener, _ := net.Listen("tcp", "localhost:8000")
conn,_ := listener.Accept()

由源码可知,Listen(tcp,url) 函数实际返回的是 *TCPListener  或者 *UnixListener,只不过返回的值赋给了 Listener接口。而在调用该接口的 Accept()方法时,为TCPListener  或者 UnixListener的方法。

posted on 2017-05-25 23:26  Lemo_wd  阅读(879)  评论(0编辑  收藏  举报

导航