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

最新文章

  1. IO多路复用之poll总结
  2. PetaPoco4.0 实体某个字段不赋值会更新成null解决方案
  3. .NET Core 调用WCF 服务
  4. ios UITableview 刷新某一个cell 或 section
  5. 10、java中的抽象类
  6. Shell之数学计算
  7. 克隆复制可使用原型( Prototype)设计模式
  8. Android中获取蓝牙log
  9. 指令随笔之:tail、cat、scp、&、&&、;、|、>、>>
  10. win7下无法安装QTP-少了Microsoft Visual c++2005 sp1运行时组件
  11. RSA的密钥把JAVA格式转换成C#的格式
  12. 两页pdf打印为一页,并且放大(打印英文pdf常用)
  13. Android项目实战--手机卫士20--拿到已经安装了的程序以及程序管理主界面
  14. 使用智能移动设备访问Ossim制
  15. JQUERY省、市、县城市联动选择
  16. ASP.NET SignalR 2.0入门指南
  17. android 定时器(Handler Timer Thread AlarmManager CountDownTimer)
  18. css中的数学表达式calc()
  19. Zynq启动流程
  20. pip3 install的时候报错timed out

热门文章

  1. 70个注意的Python小Notes
  2. zabbix 客户端安装配置
  3. Java 8系列之Stream的基本语法详解
  4. SpringCloud服务间调用
  5. 检查死锁与Locked ownable synchronizers(转载)
  6. java File.separator 简介
  7. latex学习(四)tlmgr
  8. openfire接收离线消息
  9. Linux初始化init系统-Sysvinit、Upstart、Systemd
  10. java获取视频的第一帧