20210423接口小tip,碰巧弄明白了定义&创建&实现的区别 - ziyouzy/2021blog GitHub Wiki
首先之前发生了如下错误:
c := net.Conn//报错 var c net.Conn//正确
c =someTCPSTRUCK{}
于是学习如下文章:
https://www.jianshu.com/p/82436645927b
首先明确一点接口存在静态类型与动态类型的区别:
net.Conn是golang内置的静态类型接口
var c net.Conn只是创建了一个net.Conn的接口,而c并不是逻辑概念上的“动态类型”或者“动态值”
而成功进行了某种结构体赋值后(c =someTCPSTRUCK{}),这个实现了他的结构体才是这个接口的“动态类型”,这个结构体的值为这个接口的“动态值”
值得注意的是只完成了var c net.Conn的操作后,c的值为nil,这种状态是代表了一种“暂时不知道c的动态类型是什么”状态,也就更不用说他的动态值是什么了
继续聊碰巧弄明白了什么:
//声明并初始化一个变量 var m int = 10
如上例子可知道,定义只能是定义
但是声明和创建似乎是一回事,但是声明这个词语义实在是太模糊了,这和编程的历史有关,尤其是不同语言,声明可能含义是不同的
而赋值和初始化似乎是一回事,但是不就是,因为赋值可以重复进行
实现又是另外一回事了,实现的使用场景是“实现了某个接口”
其实实现的语境是比较特殊的,比如,你也可以说“实现了某种算法”
就像是“为一套骨架添加肌肉”的过程
最后总结下记忆方法吧:
定义、创建、初始化、实现以后我只使用这四个词来诉说我在做什么