目录:- 引出问题
- 类比举例
- 总结
1、引出问题: 为什么conn可以作为io.writer/io.reader参数进行读取?
io.write有write方法接口
type Writer interface{Write(p []byte)(n int, err error)}
net.dial返回的conn也具有write方法接口
type Conn interface{Read(b []byte)(n int, err error)Write(b []byte)(n int, err error)Close()errorLocalAddr() Addr
RemoteAddr() Addr
SetDeadline(t time.Time)errorSetReadDeadline(t time.Time)errorSetWriteDeadline(t time.Time)error}
所以实现可该方法就可以作为参数进行传入
2、类比举例
举一个例子,动物界举办动物代表长跑比赛,但是条件为陆栖动物(会跑)
(1).定义个比赛,参数为动物,只要会跑即可(将动物进行抽象)
type Animal interface{Run()(int,error)}funcRunGame(animal Animal)(speed int, err error){return animal.Run()}
(2).选手就位
一号选手小猪佩奇
type Pig struct{
Name string
Speed int}func(p *Pig)Run()(interror){
fmt.Println(p.Name +" 慢慢悠悠地走来了...")return p.Speed,nil}func(p *Pig)Eat(){}
二号选手黑猫警长
type Cat struct{
Name string
Speed int}func(c *Cat)Run()(int,error){
fmt.Println(c.Name +" 凌波微步、飞檐走壁...")return c.Speed,nil}
三号选手江小鱼(乱入选手)
type Fish struct{
Name string
Speed int}func(f *Fish)Swim()(int,error){
fmt.Println(f.Name +" 游啊游...")return f.Speed,nil}
(3).主函数
funcmain(){
prank :=RunGame(&Pig{Name:"小猪佩奇", Speed:30})
crank :=RunGame(&Cat{Name:"黑猫警长", Speed:80})
frank :=RunGame(&Fish{Name:"江小鱼", Speed:85})
fmt.Println(prank, crank, frank)}
运行之后报错: 意思就是鱼不能跑
cannot use &Fish literal (type *Fish) as type Animal in argument to RunGame:
*Fish does not implement Animal (missing Run method)
把江小鱼赶出比赛后的结果为
小猪佩奇 慢慢悠悠地走来了...
黑猫警长 凌波微步、飞檐走壁...
30 80
三、总结
在股市里有一种说法叫借壳上市,只要你的公司具备壳的所有方法。你的公司就可以上市,在股市里融资。
换句话说。资本市场操作的对象就是上市的股票,上了市的股票就能被资本市场操作。
壳也就是接口
版权归原作者 国际渣男 所有, 如有侵权,请联系我们删除。