golang - interface的作用
阿新 • • 發佈:2017-05-26
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的作用