代码之家  ›  专栏  ›  技术社区  ›  BrianM

Golang隐藏通道的实现细节

  •  0
  • BrianM  · 技术社区  · 3 年前

    在我的代码中,我有接口

    import amqp "github.com/rabbitmq/amqp091-go"
    
    type Consumer interface {
        StartConsuming(queueName, key string) (<-chan amqp.Delivery, error)
    }
    

    及其impl

    package rabbitmq
    
    import amqp "github.com/rabbitmq/amqp091-go"
    
    type Consumer struct {
        *Connection
    }
    
    func (c Consumer) StartConsuming(queueName, key string) (<-chan amqp.Delivery, error) {
        _, err := c.Channel.QueueDeclare(
            queueName,
            true,
            false,
            false,
            false,
            nil,
        )
    
        ...
    
        return c.Connection.Consume(
            queueName,
            "",
            false,
            false,
            false,
            false,
            nil,
        )
    }
    
    

    问题是,在我的界面中,我不想指定它是类型的传递 amqp.Delivery ,我希望它是一个通用消息,这样我就可以随时切换到任何其他代理,例如MQTT。但我不知道如何使这个更抽象、更少的实现绑定,从而使它保持“愚蠢”。通常情况下,使用结构变量等会很容易,但在这里,我仍然不知道这个通道。

    1 回复  |  直到 3 年前