gpt4 book ai didi

go - Go中特定类型的调用函数

转载 作者:IT王子 更新时间:2023-10-29 01:25:52 28 4
gpt4 key购买 nike

我是一个完整的 Go 新手,很抱歉提前提出这个问题。

我正在尝试使用一个如此定义的接口(interface)来连接到消息代理:

// Broker is an interface used for asynchronous messaging.
type Broker interface {
Options() Options
Address() string
Connect() error
Disconnect() error
Init(...Option) error
Publish(string, *Message, ...PublishOption) error
Subscribe(string, Handler, ...SubscribeOption) (Subscriber, error)
String() string
}

// Handler is used to process messages via a subscription of a topic.
// The handler is passed a publication interface which contains the
// message and optional Ack method to acknowledge receipt of the message.
type Handler func(Publication) error

// Publication is given to a subscription handler for processing
type Publication interface {
Topic() string
Message() *Message
Ack() error
}

我正在尝试使用 Subscribe 功能来订阅一个 channel ,这就是我现在正在努力的地方。我目前的方法是以下一种:

natsBroker.Subscribe(
"QueueName",
func(p broker.Publication) {
fmt.Printf(p.Message)
},
)

错误输出是cannot use func literal (type func(broker.Publication)) as type broker.Handler in argument to natsBroker.Subscribe
但是如何确保函数类型实际上是 broker.Handler

感谢您提前抽空!

更新

万一有人感兴趣,缺少导致错误的错误返回类型,所以它看起来应该类似于:

natsBroker.订阅( "队列名称", broker.Handler(func(p broker.Publication) 错误 { fmt.Printf(p.Topic()) 返回零 }),)

最佳答案

如错误所示,参数与您传递的内容不匹配:

type Handler func(Publication) error

func(p broker.Publication)

您没有返回值。如果您添加一个返回值(即使您总是返回 nil),它也会正常工作。

关于go - Go中特定类型的调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53307233/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com