最准确的Go语言运算符优先级介绍
Overview
前言
写Go代码时一下子想不起准确的运算符优先级了,Google搜索了下,发现前面几个SEO做的比较好的网址给的要不就是错的,要不就是写的乱七八糟,误人子弟。喷的就是下面这几个出错的:
- https://haicoder.net/golang/golang-operator-precedence.html
 - http://c.biancheng.net/view/5559.html
 - http://gitbook.net/go/go_operators_precedence.html
 
这几个基本上是互相抄的,没有验证,很容易反驳。比如,上面说"+", "-"的优先级大于“|”,那么以下代码
1a := 2 | 4 - 1
的结果应该等同于
1a := 2 | (4 - 1)
但实际上前者结果为5,后者的答案是3。原因是“-”运算符优先级与“|”实际上是相等的。
验证链接: https://go.dev/play/p/fPFNO8r6bJ3
简单分享下正确的运算符优先级,避免后人踩坑。
正确的运算符优先级
Google找到了官方的说明:
可以参考其中Operator Precedence一节,介绍的非常清楚。
- 单目运算符优先级最高。
 
单目运算符包括:
1"+" | "-" | "!" | "^" | "*" | "&" | "<-" 
- 双目运算符分5个优先级,从高到低为
 
1Precedence    Operator
2    5             *  /  %  <<  >>  &  &^
3    4             +  -  |  ^
4    3             ==  !=  <  <=  >  >=
5    2             &&
6    1             ||
分别是: “乘法类”,“加法类”,“比较类”,“逻辑与”,“逻辑或”,优先级最低的是“逻辑或”。