運算子
算術運算子
返回數值
運算子 | 描述 |
---|
+ | 相加 |
- | 相減 |
* | 相乘 |
/ | 相除 |
% | 求餘 |
++ | 自增 |
– | 自減 |
關係運算子
返回True或者False
運算子 | 描述 |
---|
== | 檢查兩個值是否相等,如果相等返回 True 否則返回 False。 |
!= | 檢查兩個值是否不相等,如果不相等返回 True 否則返回 False。 |
> | 檢查左邊值是否大於右邊值,如果是返回 True 否則返回 False。 |
< | 檢查左邊值是否小於右邊值,如果是返回 True 否則返回 False。 |
< | 檢查左邊值是否小於右邊值,如果是返回 True 否則返回 False。 |
>= | 檢查左邊值是否大於等於右邊值,如果是返回 True 否則返回 False。 |
<= | 檢查左邊值是否小於等於右邊值,如果是返回 True 否則返回 False。 |
邏輯運算子
運算子 | 描述 |
---|
&& | 邏輯 AND 運算子。 如果兩邊的運算元都是 True,則條件 True,否則為 False。 |
l l | 邏輯 OR 運算子。 如果兩邊的運算元有一個 True,則條件 True,否則為 False。 |
! | 邏輯 NOT 運算子。 如果條件為 True,則邏輯 NOT 條件 False,否則為 True。 |
位運算子
運算子 | 描述 |
---|
& | 按位與運算子"&"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相與。 |
l | 按位或運算子"l"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相或 |
^ | 按位異或運算子"^"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。 |
<< | 左移運算子"<<“是雙目運算子。左移n位就是乘以2的n次方。 其功能把”<<“左邊的運算數的各二進位全部左移若干位**,由”<<"右邊的數指定移動的位數,高位丟棄,低位補0。** |
>> | 右移運算子">>“是雙目運算子。右移n位就是除以2的n次方。 其功能是把”>>“左邊的運算數的各二進位全部右移若干位,”>>"右邊的數指定移動的位數。 |
- 什麼是位運算
程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算就是直接對整數在記憶體中的二進位制位進行操作。 - 雙目運算子
運算所需變數為兩個的運算子叫做雙目運算子,或者要求運算物件的個數是2的運算子稱為雙目運算子。
賦值運算子
運算子 | 描述 | 例項 |
---|
= | 簡單的賦值運算子,將一個表示式的值賦給一個左值 | |
+= | 相加後再賦值 | C += A 等於 C = C + A |
-= | 相減後再賦值 | C -= A 等於 C = C - A |
*= | 相乘後再賦值 | C *= A 等於 C = C * A |
/= | 相除後再賦值 | C /= A 等於 C = C / A |
%= | 求餘後再賦值 | C %= A 等於 C = C % A |
<<= | 左移後賦值 | C <<= 2 等於 C = C << 2 |
>>= | 右移後賦值 | C >>= 2 等於 C = C >> 2 |
&= | 按位與後賦值 | C &= 2 等於 C = C & 2 |
^= | 按位異或後賦值 | C ^= 2 等於 C = C ^ 2 |
其他運算子
運算子 | 描述 | 例項 |
---|
& | 返回變數儲存地址 | &a; 將給出變數的實際地址。 |
* | 指標變數 | *a; 是一個指標變數 |
優先順序
優先順序 | 運算子 |
---|
5 | * / % << >> & &^ |
4 | + - |
3 | == != < <= > >= |
2 | && |
1 | ll |
控制語句
條件語句
指定一個或多個條件,並通過測試條件是否為 true 來決定是否執行指定語句,並在條件為 false 的情況在執行另外的語句。
if語句
- 由一個布林表示式後緊跟一個或多個語句組成。
- 可以使用可選的 else 語句, else 語句中的表示式在布林表示式為 false 時執行;語句中可嵌入一個或多個 if 或 else if 語句
- 注意,Go 沒有三目運算子,所以不支援 ?: 形式的條件判斷。
switch語句
- 用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上至下逐一測試,直到匹配為止;
- 匹配項後面不需要再加 break;
- switch 預設情況下 case 最後自帶 break 語句,匹配成功後就不會執行其他 case,如果我們需要執行後面的 case,可以使用 fallthrough ;
- fallthrough:強制執行後面的 case 語句,fallthrough 不會判斷下一條 case 的表示式結果是否為 true;
- 解釋:從第一個判斷表示式為 true 的 case 開始執行,如果 case 帶有 fallthrough,程式會繼續執行下一條 case,且它不會去判斷下一個 case 的表示式是否為 true
- 支援多條件匹配
- 不同的 case 之間不使用 break 分隔,預設只會執行一個 case
- 如果想要執行多個 case,需要使用 fallthrough 關鍵字,也可用 break 終止
select語句
- 每個 case 都必須是一個通訊
- 所有 channel 表示式都會被求值
- 所有被髮送的表示式都會被求值
- 如果任意某個通訊可以進行,它就執行,其他被忽略。
- 如果有多個 case 都可以執行,Select 會隨機公平地選出一個執行。其他不會執行。 否則:
- 如果有 default 子句,則執行該語句。
- 如果沒有 default 子句,select 將阻塞,直到某個通訊可以執行;Go 不會重新對 channel 或值進行求值。
迴圈語句
for 迴圈
for init; condition; post { }
for condition { }
for {}
for 迴圈的 range 格式可以對 slice、map、陣列、字串等進行迭代迴圈:
for key, value := range oldMap {
newMap[key] = value
迴圈巢狀
for [condition | ( init; condition; increment ) | Range] {
for [condition | ( init; condition; increment ) | Range] {
statement(s);
}
statement(s);
}
迴圈控制語句
- break語句
- 用於迴圈語句中跳出迴圈,並開始執行迴圈之後的語句。
- break 在 switch(開關語句)中在執行一條 case 後跳出語句的作用。
- 在多重迴圈中,可以用標號 label 標出想 break 的迴圈。
- continue語句
- goto
- 無條件轉移到過程中指定行,與條件語句配合,實現條件轉移、構成迴圈、跳出迴圈體等(不建議用,造成混亂)