Кастовать каналы вроде как нельзя в go. Придется создавать промежуточный канал. Примерно так я это вижу. Но скорее всего оно не работает так как надо
https://play.golang.org/p/i8-69C6RDrG
package main
import (
"fmt"
"github.com/streadway/amqp"
)
type (
IConsumer interface {
Consume() (<-chan interface{}, error)
}
AmqpConsumer struct {
conn *amqp.Connection
topic string
channel *amqp.Channel
}
)
func (pr *AmqpConsumer) Consume() (<-chan interface{}, error) {
var msgs <-chan interface{}
ch, err := pr.conn.Channel()
if err != nil {
return msgs, err
}
defer ch.Close()
amqp_msgs, err := ch.Consume(
pr.topic, // queue
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
return msgs, err
}
var castCh chan interface{}
go func() {
for msg := range amqp_msgs {
castCh <- msg
}
}()
return castCh, nil
}
func main() {
fmt.Println("Hello, playground")
}