【问题标题】:Is it possible to convince the Golang compiler to accept `type Foo int` as an `int`?是否可以说服 Golang 编译器接受 `type Foo int` 作为 `int`?
【发布时间】:2016-04-20 12:58:01
【问题描述】:

我正在为 Go 使用 pebbe/zmq4 ZeroMQ 绑定,并且我正在尝试为 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 绑定?

【问题讨论】:

  • Socket接口的用户是否需要知道zmq4常量才能使用接口?如果是这样,在你的包中导入 zmq4 并没有太大的缺点。
  • 好点...我是唯一使用它的人,所以导入 zmq4 应该不是问题。本质上,我的好奇心让我像往常一样让事情变得更加困难。

标签: go zeromq


【解决方案1】:

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

使用 zmq4.Flag 调用 RecvMessage 的唯一方法是将其转换为 int。

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

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多