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的方法。