1. 程式人生 > >golang - interface的作用

golang - interface的作用

log cal cep cnblogs () lang highlight truct plist

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

golang - interface的作用