请教各位大佬, Go 里面接口实现函数签名必须要一样吗?

2022-04-20 17:41:51 +08:00
 Ritter
notify.go
https://imgur.com/17DVllo
ewx_notify.go
https://imgur.com/MgtnFDV

这样算实现了 Send 这个接口吗?
但是当我定义这个 SERVICES 时报错了
https://imgur.com/8Y6Pwnw

我的想法是定义一个 base 的接口可以接收部分相同的参数,实现的接口可以传递其他额外的参数,不知道这个用 Go 怎么实现,请教各位大佬,谢谢
1294 次点击
所在节点    Go 编程语言
4 条回复
Ritter
2022-04-20 17:43:05 +08:00
Ritter
2022-04-20 17:48:54 +08:00
第三张图 SERVICES 的定义是
```go
package main

import (
"message/service"

"gopkg.in/ini.v1"
)

var SERVICES map[string]func(*ini.Section) service.Notify

func init() {
SERVICES = map[string]func(*ini.Section) service.Notify{
"ewx_notify": service.GetEWXNotify,
}
}
```
yulon
2022-04-20 18:17:42 +08:00
如果接口 A 方法的返回类型是接口 B ,那么结构 A 方法的返回类型如果实现了接口 B ,结构 A 也算实现了接口 A 。

你这里返回的都是结构指针,Go 里面用 type 声明的都是新类型而不是别名,自然不算实现,你应该定义一个接口作为返回类型。
Ritter
2022-04-21 10:46:20 +08:00
@yulon 可是我返回的结构体没有什么共同的方法😂 这样只能用 interface{}代替了吗

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

https://www.v2ex.com/t/848205

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

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

© 2021 V2EX