是否有可能说服 Golang 编译器接受 `type Foo int` 作为 `int`?
Is it possible to convince the Golang compiler to accept `type Foo int` as an `int`?
我正在为 Go 使用 pebbe/zmq4
ZeroMQ 绑定,并且我正在尝试为 ZeroMQ 实现的代码开发更高级别的接口,以便在我的测试中支持模拟。
作为我的问题的一个例子,zmq4.Socket
结构的 RecvMessage
函数需要一个 zmq4.Flag
作为参数。 zmq4.Flag
只是一个 int
,由 type Flag int
在 Go 绑定中定义。
我正在尝试开发我的接口而不依赖于 ZeroMQ 绑定,所以我有一个接口定义为:
type Socket interface {
RecvMessage(int) ([]string, error)
}
当我尝试为此接口使用 ZeroMQ 套接字时,我收到一条错误消息 ... have RecvMessage(zmq4.Flag) ([]string, error) want RecvMessage(int) ([]string, error)
。
有什么方法可以解决这个问题,还是我只需要硬着头皮依赖接口中的 ZeroMQ 绑定?
重要的是要认识到 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 使用 pebbe/zmq4
ZeroMQ 绑定,并且我正在尝试为 ZeroMQ 实现的代码开发更高级别的接口,以便在我的测试中支持模拟。
作为我的问题的一个例子,zmq4.Socket
结构的 RecvMessage
函数需要一个 zmq4.Flag
作为参数。 zmq4.Flag
只是一个 int
,由 type Flag int
在 Go 绑定中定义。
我正在尝试开发我的接口而不依赖于 ZeroMQ 绑定,所以我有一个接口定义为:
type Socket interface {
RecvMessage(int) ([]string, error)
}
当我尝试为此接口使用 ZeroMQ 套接字时,我收到一条错误消息 ... have RecvMessage(zmq4.Flag) ([]string, error) want RecvMessage(int) ([]string, error)
。
有什么方法可以解决这个问题,还是我只需要硬着头皮依赖接口中的 ZeroMQ 绑定?
重要的是要认识到 type Foo int
是一个单独的类型而不是别名。
参见 How to cast to a type alias in Go?
要使用 zmq4.Flag 调用 RecvMessage,您唯一可以做的就是将其转换为 int。
var f zmq4.Flag = 1
RecvMessage(int(f))