是否有可能说服Golang编译器接受`type Foo int`作为`int`?

时间:2016-01-15 00:43:34

标签: go zeromq

我正在使用Go的pebbe/zmq4 ZeroMQ绑定,我正在尝试为我的代码开发更高级别的接口,以便在我的测试中支持模拟。

作为我的问题的一个示例,zmq4.Socket结构RecvMessage函数需要zmq4.Flag作为参数。 zmq4.Flag只是int,由Go绑定中的type Flag int定义。

我试图在不依赖ZeroMQ绑定的情况下开发我的接口,所以我将接口定义为:

type Socket interface {
    RecvMessage(int) ([]string, error)
}

当我尝试为此接口使用ZeroMQ套接字时,我收到一条错误,指出... have RecvMessage(zmq4.Flag) ([]string, error) want RecvMessage(int) ([]string, error)

有没有办法解决这个问题,或者我只需要咬紧牙关并依赖我界面中的ZeroMQ绑定?

1 个答案:

答案 0 :(得分:4)

重要的是要认识到type Foo int是一个单独的类型而不是别名。 见How to cast to a type alias in Go?

使用zmq4.Flag调用RecvMessage唯一可以做的就是将其转换为int。

var f zmq4.Flag = 1
RecvMessage(int(f))