我正在使用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/

10-09 06:19