稀有哦资源供求网

 找回密码
 立即注册
回复: 2

[已解决] golang的接口快把我给整疯了

[复制链接]

品头论足

1

主题

2

帖子

0

稀币

注册会员

Rank: 1

积分
0
有点编程基础的我自学了一段时间go语言了,一直止步在接口这一块,知道接口的基本用法,在本包里可以灵活使用接口,但是外包使用另外一个包的接口时我真的就懵圈了,根本不知道哪个结构体实现了哪个接口,还有两个不是同包接口和结构体之间的赋值这一块真的快整疯我了,天天上语数英课啥也不听,就自己一个人自学go,学了这么多天感觉也没领悟接口这一块,这个隐式实现真的太难了,根本不知道谁实现了谁?谁可以赋值给谁?现在最经典的io包下边的writer接口和reader接口我都没搞明白,看讲师讲的都太浅,就只讲本包使用本包的接口和赋值,外包的就不讲,一个外包(http包)接口类型和结构体之间的赋值一下子我就懵圈了,自学真的太难了,我都快撑不住了,这几天一直专注接口这一块的学习,但是没太大的进展,都说go的接口是go最妙的特性,但我为啥觉得go的接口并没有那么神,特别是这个隐式声明,真的搞不懂谁实现了谁?大佬们可否给小弟指点迷津?小弟真的洗耳恭听,感激不尽。
回复

使用道具 举报

---------------------------------------------------------------------------------------
Tips:
1、当前版块参与回复竞价排序时,如需增加竞拍金额,可通过编辑进行增量补差价,无需再次全额竞拍.
2、当前版块主题帖免费提问,但标题或内容中,禁止宣传信息.解决方案仅可在回复中提供.如需直接发布广告,请到[广告信息发布区].
3、发布信息中涉嫌恶意,诈骗等不正规网址或信息,可能使访问者造成损失的,将被封号.
4、使用各种方式发布恶意信息,或冒充管理人员的,将被封号.网站管理组成员名单请 点此查看 ,网站唯一联系邮箱为xiyouo@vip.qq.com.
---------------------------------------------------------------------------------------


jongla

0

主题

1

帖子

0

稀币

注册会员

Rank: 1

积分
0
接口是一种“规范”,也就是接口的实现类都要遵循这个“规范”,假如这个“规范”体现在接口的方法上,那么所有的接口实现类都要实现该接口方法(遵循“规范”,和接口一致,即接口有什么动作,实现类也有什么动作)。那么好了,如果有一个类,它封装的方法恰好和接口定义的方法一致,也就是说它无形中遵循了接口的“规范”,所以它隐形的成了接口的实现类

打个比方,某工厂的一批零件有个生产指标,比如直径为10cm(可以理解为有个接口方法),那么在这个工厂里生产的零件都符合这个指标,也就是都符合这个接口,因为在该工厂生产的,所以显示地遵循了标准(也就是显示实现接口)。那么好了,另一家工厂也生产一种零件,刚好直径也是10cm(可以理解为有个方法和接口方法一样)。假如我么第一家工厂生产的零件坏了,我们要找一个零件代替,我们发现另一家工厂的零件刚好也是10cm(也有同样的接口方法),也符合第一家工厂的生产指标,所以也可以拿来代替使用。你会发现,另一家工厂没有特意去遵循第一个工厂的指标(没有显示implement),但事实上却隐式的遵循的指标,也就是说另一家工厂的零件,隐式地实现了第一家工厂的接口,所以它也和第一家工厂生产的零件一样,能应用在相同的场合。
回复

使用道具 举报


品头论足

1

主题

2

帖子

0

稀币

注册会员

Rank: 1

积分
0
 楼主| | 显示全部楼层
谢谢大佬,我自己定义的接口和结构体之间的使用我还是能搞明白的,(接口的规则我懂了)但是标准库里边的我就有点搞不懂了,比如
Readall( io reader)
Readall方法接收一个实现了io reader接口的参数,但是下边的例子file怎么就变成就实现io reader接口的参数了?os. Open后返回的应该是os. Open类型的变量,我怎么知道和确定file实现了io reader接口?讲真的,我是真的看不出来file这个变量能跟io reader接口有半毛钱关系,大佬拜托您指点。

func main() {
file, _ := os.Open("test")
b, _ := ioutil.ReadAll(file)
fmt.Println(string(b))
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

      

关于我们|联系我们|稀有哦资源供求网 | 网站统计

GMT+8, 2024-5-22 03:07

Origins Since 1919 © Singapore Yongxin Association , Inc. or its affiliates

快速回复 返回顶部 返回列表