2016-01-15 2 views
0

Я использую привязки ZeroMQ для Go, но я пытаюсь разработать интерфейсы более высокого уровня для моего кода, который ZeroMQ реализует, чтобы поддерживать насмешку в моих тестах.Можно ли убедить компилятор Golang принять `type Foo int` как` int`?

В качестве примера моего вопроса функция zmq4.Socket struct 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 в моих интерфейсах?

+0

Должен ли пользователь интерфейса Socket знать константы zmq4 для использования интерфейса? Если это так, в импортировании zmq4 в вашем пакете не так много недостатков. –

+0

Хорошая точка ... Я единственный, кто ее использует, поэтому импорт zmq4 не должен быть проблемой. По сути, мое любопытство заставляет меня усложнять ситуацию, как обычно. – Bryan

ответ

3

Важно понимать, что type Foo int - это отдельный тип, а не псевдоним. См. How to cast to a type alias in Go?

Единственное, что вы можете сделать, чтобы вызвать RecvMessage с zmq4.Flag, это преобразовать его в int.

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

Спасибо за информацию! – Bryan

 Смежные вопросы

  • Нет связанных вопросов^_^