文章目錄
- 1. 算術運算符
- 2. 關系運算符
- 3. 邏輯運算符
- 4. 位運算符
- 5. 賦值運算符
- 6. 其他運算符
- 運算符優先級
- 注意事項
Go語言提供了與其他語言類似的運算符,包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符等。這些運算符即可滿足基本的運算需求。
1. 算術運算符
運算符 | 描述 | 示例 |
---|---|---|
+ | 加法 | a + b |
- | 減法 | a - b |
* | 乘法 | a * b |
/ | 除法 | a / b |
% | 取模(求余) | a % b |
++ | 自增 a++ | (Go中只有后置) |
– | 自減 | a-- (Go中只有后置) |
a := 10
b := 3
fmt.Println(a + b) // 13
fmt.Println(a - b) // 7
fmt.Println(a * b) // 30
fmt.Println(a / b) // 3 (整數除法)
fmt.Println(a % b) // 1
a++ // a = 11
b-- // b = 2
2. 關系運算符
運算符 | 描述 | 示例 |
---|---|---|
== | 等于 | a == b |
!= | 不等于 | a != b |
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于等于 | a >= b |
<= | 小于等于 | a <= b |
x := 5
y := 7
fmt.Println(x == y) // false
fmt.Println(x != y) // true
fmt.Println(x > y) // false
fmt.Println(x < y) // true
fmt.Println(x >= 5) // true
3. 邏輯運算符
運算符 | 描述 | 示例 |
---|---|---|
&& | 邏輯與 | a && b |
|| | 邏輯或 | a || b |
! | 邏輯非 | !a |
a := true
b := false
fmt.Println(a && b) // false
fmt.Println(a || b) // true
fmt.Println(!a) // false
4. 位運算符
運算符 | 描述 | 示例 |
---|---|---|
& | 按位AND | a & b |
| | 按位OR | a | b |
^ | 按位XOR | a ^ b |
&^ | 位清除(AND NOT) | a &^ b |
<< | 左移 | a << b |
>> | 右移 | a >> b |
x := 10 // 1010
y := 3 // 0011
fmt.Println(x & y) // 2 (0010)
fmt.Println(x | y) // 11 (1011)
fmt.Println(x ^ y) // 9 (1001)
fmt.Println(x &^ y) // 8 (1000)
fmt.Println(x << 1) // 20 (10100)
fmt.Println(x >> 1) // 5 (0101)
5. 賦值運算符
運算符 | 描述 | 示例 |
---|---|---|
= | 簡單賦值 | a = b |
+= | 加后賦值 | a += b (等價于a = a + b) |
-= | 減后賦值 | a -= b |
*= | 乘后賦值 | a *= b |
/= | 除后賦值 | a /= b |
%= | 取模后賦值 | a %= b |
&= | 按位AND后賦值 | a &= b |
|= | 按位OR后賦值 | a |= b |
^= | 按位XOR后賦值 | a ^= b |
<<= | 左移后賦值 | a <<= b |
>>= | 右移后賦值 | a >>= b |
a := 10
a += 5 // a = 15
a -= 3 // a = 12
a *= 2 // a = 24
a /= 4 // a = 6
a %= 4 // a = 2
6. 其他運算符
運算符 | 描述 | 示例 |
---|---|---|
& | 取地址 | &a |
* | 指針解引用 | *p |
<- | 通道操作 | ch <- x (發送), x = <-ch (接收) |
x := 10
ptr := &x // 獲取x的地址
fmt.Println(*ptr) // 10 (解引用)ch := make(chan int, 1)
ch <- 5 // 發送到通道
val := <-ch // 從通道接收
運算符優先級
Go語言運算符優先級從高到低如下:
在實際應用中,建議使用括號來保證運算符的執行順序,避免出現預期外的結果,即使你的優先級背的滾瓜爛熟,還是會受到編譯器版本影響。
1、() [] -> . ++ – (后綴)
2、! ^ + - * & <- ++ – (前綴)
3、* / % << >> & &^
4、+ - | ^
5、== != < <= > >=
6、&&
7、||
8、= += -= *= /= %= <<= >>= &= ^= |=
注意事項
1、Go語言沒有前置的++和–運算符,只有后置形式。
2、Go語言沒有三元運算符(?😃,必須使用if-else代替。
3、不同類型的值不能直接運算,必須顯式轉換。
4、整數除法會截斷小數部分。
// 錯誤示例
a := 5
// b := ++a // 錯誤:Go沒有前置++// 正確做法
a++
b := a// 類型轉換示例
var x int32 = 10
var y int64 = 20
// sum := x + y // 錯誤:類型不匹配
sum := int64(x) + y // 正確
掌握這些運算符是編寫Go程序的基礎,合理使用可以提高代碼的簡潔性和效率。