go 结构体定义:匿名接口和具名接口

13 天前
 YanSeven
定义一个结构体 A ,里面用到三个接口类型 i1,i2,i3 。
那么这 3 个接口在 A 里面是作为一个具名的接口成员呢,还是匿名。

这个该如何决策
1373 次点击
所在节点    Go 编程语言
7 条回复
kfpenn
13 天前
如果是匿名的,可以把 A 当做实现了 i1,i2,i3 的实例直接当参数使用,如果没有这个需求,那就看你习惯,想命名还是匿名都可以
zone10
13 天前
啊? 你的意思是把接口嵌入到结构体里? 我写了这么久 Go 第一次知道有这种写法, 试了一下好像还没毛病. 不过这是反模式不建议这么写, Go 是鸭子类型, A 实现 i1,i2,i3 的方法自动就实现了接口, 不需要嵌入到结构体
gongym
13 天前
按照正常需求来说应该是匿名吧,A 就是 i1,i2,i3 接口的组合
ycp
13 天前
| 如果你在… | 建议 |
| -------------------- | ------------ |
| 写业务逻辑或服务模块 | 用 **具名接口** |
| 写一次性函数回调 | 可以用 **匿名接口** |
| 想让结构体更容易测试、Mock 、依赖注入 | 必须用 **具名接口** |
问了下 gpt 大多数情况用具名吧
paceewang1
13 天前
1 、首先如果 A 是结构体的话,建议都是具名嵌入吧,不然接口里面有相同的方法还是要用具名的。
2 、如果要表达的 A 是 i1,i2,i3 的并集,那么 A 应该也是一个接口而不是结构体。
strobber16
12 天前
go 的接口的命不命名不影响类型等于,除了担心污染命名空间,几乎没理由使用匿名接口
neoblackcap
12 天前
如果是想实现一个 i1 | i2 | i3 的并集接口类型,那么就要用匿名

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1165344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX