golang优先级坑

看如下代码,我本以为a1, a2是相同的

package main

import "fmt"

func main() {
	b, c, d := 1, 0, 1
	a1 := b ^ c&(^d) // 1 ^
	a2 := c ^ b&(^d) // 0 ^
	fmt.Println(a1, a2) // 1 0
}

但结果却是不同的,在golang中&的优先级^和|高,如下
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在RabbitMQ中,可以使用优先级队列(Priority Queue)来为消息定义优先级。使用优先级队列可以确保高优先级的消息被先处理,从而提高系统的性能和可靠性。 在Golang中,使用RabbitMQ客户端库(如`github.com/streadway/amqp`)可以实现消费者消费优先级队列中的消息。下面是一个使用Golang消费RabbitMQ优先级队列的例子: ```go package main import ( "fmt" "log" "github.com/streadway/amqp" ) func main() { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Fatalf("failed to connect to RabbitMQ: %v", err) } defer conn.Close() ch, err := conn.Channel() if err != nil { log.Fatalf("failed to open a channel: %v", err) } defer ch.Close() q, err := ch.QueueDeclare( "priority_queue", // queue name true, // durable false, // delete when unused false, // exclusive false, // no-wait amqp.Table{ "x-max-priority": 10, // max priority level }, ) if err != nil { log.Fatalf("failed to declare a queue: %v", err) } msgs, err := ch.Consume( q.Name, // queue name "", // consumer name false, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) if err != nil { log.Fatalf("failed to register a consumer: %v", err) } for msg := range msgs { log.Printf("received message with priority %d: %s", msg.Priority, string(msg.Body)) if err := msg.Ack(false); err != nil { log.Printf("failed to ack message: %v", err) } } } ``` 在上面的代码中,我们首先使用`QueueDeclare`方法创建一个名为`priority_queue`的优先级队列,其中`x-max-priority`参数指定了最大的优先级级别为10。 然后使用`Consume`方法订阅该队列中的消息,使用`msg.Priority`获取消息的优先级,然后处理消息逻辑,最后使用`msg.Ack`方法手动确认消息已经被消费。 注意,需要确保发送到该队列中的消息设置了正确的优先级。 以上就是使用Golang消费RabbitMQ优先级队列的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值