Для примера набросал такой код. Цель функции - вернуть канал с интерфейсом, чтобы реализовать абстрактный тип канала.
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
}
return amqp_msgs, nil
}
func main() {
fmt.Println("Hello, playground")
}
https://play.golang.org/p/VTRDQjYOclf
Получаю ошибку
./prog.go:41:2: cannot use amqp_msgs (type <-chan amqp.Delivery) as type <-chan interface {} in return argument