20210128宏观总结下net.Conn的自定义实现与应用场景 - ziyouzy/2021blog GitHub Wiki
宏观上总结一下,实现一个接口的方法有两种:
1.让结构体实现接口所包含的各个方法
2.让结构体继承一个已经实现了这个方法的接口体
net包/tcpsocket.go第85行:
type TCPConn struct {
conn
}
net包/net.go第169行:
type conn struct {
fd *netFD
}
假如我想把一个第三方snmp包或serial包并入net.Conn的设计思路,理论上是可行的
但是我先要去了解下第三方包的源代码,毕竟这类网络io的底层思路都是listenr+conn的思路
listenr可以不同,但是各个conn可以让他们共同实现net.Conn这个接口
或者为每个第三方包自行设计适配的Conn结构体,让结构体时间net.Conn接口
net.Conn虽然存在于内置net包的net.go文件内,但是完全可以就像是使用其他第三方包的方式使用它,如:
package myconn
import(
“net”
)
type myConn struct{
//各个字段
//各个字段
//各个字段
}
func (p *myConn)Read(){
}
func (p *myConn)Write(){
}
func (p *myConn)SetDeadLine(){
}
//等应对net.Conn各个方法的实现
都完成后,就可以如下操作
func ()NewMyConn net.Conn{
myc :=&myConn{
//初始化各个字段
}
return myc
}
就是这么简单