我正在使用Go的pebbe/zmq4
ZeroMQ绑定(bind),并且正在尝试为ZeroMQ实现的代码开发更高级别的接口(interface),以支持测试中的模拟。
作为我的问题的一个示例,zmq4.Socket
结构的RecvMessage
函数期望zmq4.Flag
作为参数。 zmq4.Flag
只是int
,由Go绑定(bind)中的type Flag int
定义。
我正在尝试开发不依赖ZeroMQ绑定(bind)的接口(interface),因此我将接口(interface)定义为:
type Socket interface {
RecvMessage(int) ([]string, error)
}
当我尝试为该接口(interface)使用ZeroMQ套接字时,出现错误,指出
... have RecvMessage(zmq4.Flag) ([]string, error) want RecvMessage(int) ([]string, error)
。有什么方法可以解决这个问题,还是我只需要硬着头皮依靠我界面中的ZeroMQ绑定(bind)?
最佳答案
重要的是要认识到type Foo int
是一个单独的类型,而不是别名。
参见How to cast to a type alias in Go?
用zmq4.Flag调用RecvMessage唯一可以做的就是将其转换为int。
var f zmq4.Flag = 1
RecvMessage(int(f))
关于go - 是否有可能说服Golang编译器接受 `type Foo int`作为 `int`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34802485/