我需要测试一个使用 Google Cloud Pubsub 的应用程序,因此必须包装其类型pubsub.Client并pubsub.Subscriber用于测试目的。然而,尽管进行了多次尝试,我还是无法获得可编译的接口。
我试图包装的方法的定义是:
func (s *Subscription) Receive(
ctx context.Context, f func(context.Context, *Message)) error
func (c *Client) Subscription(id string) *Subscription
这是当前的代码。界面Receiver(包装器Subscriber)似乎可以工作,但我怀疑它可能需要更改才能修复SubscriptionMaker,所以我将两者都包括在内。
注意:我已经尝试了几种引用和取消引用指针的变体,所以请不要告诉我更改它,除非您解释了为什么建议的配置是正确的或者您亲自验证了它的编译。
import (
"context"
"cloud.google.com/go/pubsub"
)
type Receiver interface {
Receive(context.Context, func(ctx context.Context, msg *pubsub.Message)) (err error)
}
// Pubsub subscriptions implement Receiver
var _ Receiver = &pubsub.Subscription{}
type SubscriptionMaker interface {
Subscription(name string) (s Receiver)
}
// Pubsub clients implement SubscriptionMaker
var _ SubscriptionMaker = pubsub.Client{}
当前错误消息:
common_types.go:21:5: cannot use "cloud.google.com/go/pubsub".Client literal (type "cloud.google.com/go/pubsub".Client) as type SubscriptionMaker in assignment:
"cloud.google.com/go/pubsub".Client does not implement SubscriptionMaker (wrong type for Subscription method)
have Subscription(string) *"cloud.google.com/go/pubsub".Subscription
want Subscription(string) Receiver
catspeake
大话西游666
相关分类