后端實習の準備:小白從零學習Go語言第四天
- 往期鏈接
- Day4
- 4.1 位運算子
- 4.2 運算子優先級
- 4.3 條件陳述句 if
- 4.4 條件陳述句 switch
往期鏈接
小白從零學習Go語言第二天
小白從零學習Go語言第三天
Day4
4.1 位運算子
- 位運算子對整數在記憶體中的二進制位進行操作,
| p | q | p & q | p|q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
&按位與運算子&是雙目運算子, 其功能是參與運算的兩數各對應的二進位相與,|按位或運算子|是雙目運算子, 其功能是參與運算的兩數各對應的二進位相或,^按位異或運算子^是雙目運算子, 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1,<<左移運算子<<是雙目運算子,左移n位就是乘以2的n次方, 其功能把<<左邊的運算元的各二進位全部左移若干位,由<<右邊的數指定移動的位數,高位丟棄,低位補0,>>右移運算子>>是雙目運算子,右移n位就是除以2的n次方, 其功能是把>>左邊的運算元的各二進位全部右移若干位,>>右邊的數指定移動的位數,
4.2 運算子優先級
- 下表列出了所有運算子以及它們的優先級,優先級值越大,表示優先級越高,
| 優先級 | 分類 | 運算子 | 結合性 |
|---|---|---|---|
| 1 | 逗號運算子 | , | 從左到右 |
| 2 | 賦值運算子 | =、+=、-=、*=、/=、 %=、 >>=、 <<=、&=、^=、|= | 從右到左 |
| 3 | 邏輯或 | || | 從左到右 |
| 4 | 邏輯與 | && | 從左到右 |
| 5 | 按位或 | | | 從左到右 |
| 6 | 按位異或 | ^ | 從左到右 |
| 7 | 按位與 | & | 從左到右 |
| 8 | 相等/不等 | ==、!= | 從左到右 |
| 9 | 關系運算子 | <、<=、>、>= | 從左到右 |
| 10 | 位移運算子 | <<、>> | 從左到右 |
| 11 | 加法/減法 | +、- | 從左到右 |
| 12 | 乘法/除法/取余 | *(乘號)、/、% | 從左到右 |
| 13 | 單目運算子 | !、*(指標)、& 、++、--、+(正號)、-(負號) | 從右到左 |
| 14 | 后綴運算子 | ( )、[ ]、-> | 從左到右 |
- 當然,你可以通過使用括號來臨時提升某個運算式的整體運算優先級,
4.3 條件陳述句 if
- Go 編程語言中 if 陳述句的語法如下:
if 布爾運算式 {
/* 在布爾運算式為 true 時執行 */
...
}else {
/* 在布爾運算式為 false 時執行 */
}
- Go 的 if 還可以在條件判斷陳述句里宣告一個變數,這個變數的作用域只在該條件邏輯塊內,其他地方不起作用,如下所示:
package main
import "fmt"
func main() {
if num := 9; num < 0 {
fmt.Println(num)
} else if num < 10 {
fmt.Println(num)
} else {
fmt.Println(num)
}
}
- 需要注意的是,
- (1) 不需使用括號將條件包含起來
- (2) 大括號{}必須存在,即使只有一行陳述句
- (3) 左括號必須在if或else的同一行
- (4) 在if之后,條件陳述句之前,可以添加變數初始化陳述句,使用
;進行分隔 - (5) 在有回傳值的函式中,最終的return不能在條件陳述句中
4.4 條件陳述句 switch
-
switch 陳述句用于基于不同條件執行不同動作,每一個 case 分支都是唯一的,從上至下逐一測驗,直到匹配為止,
-
switch 陳述句執行的程序從上至下,直到找到匹配項,匹配項后面也不需要再加 break,
-
switch 默認情況下 case 最后自帶 break 陳述句,匹配成功后就不會執行其他 case,如果我們需要執行后面的 case,可以使用 fallthrough ,
-
Go 編程語言中 switch 陳述句的語法如下:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
- 變數
var1可以是任何型別,而val1和val2則可以是同型別的任意值,型別不被局限于常量或整數,但必須是相同的型別;或者最終結果為相同型別的運算式, - 可以同時測驗多個可能符合條件的值,使用逗號分割它們,例如:case
val1,val2,val3, - 實體1:
package main
import "fmt"
func main() {
/* 定義區域變數 */
var grade string = "B"
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Printf("優秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
fmt.Printf("你的等級是 %s\n", grade );
//優秀!
//你的等級是 A
}
- Type Switch : switch 陳述句還可以被用于 type-switch 來判斷某個 interface 變數中實際存盤的變數型別,
- Type Switch 語法格式如下:
switch x.(type){
case type:
statement(s);
case type:
statement(s);
default:
statement(s);
}
- 實體2:
package main
import "fmt"
func main() {
var x interface{}
switch i := x.(type) {
case nil:
fmt.Printf(" x 的型別 :%T",i)
case int:
fmt.Printf("x 是 int 型")
case float64:
fmt.Printf("x 是 float64 型")
case bool, string:
fmt.Printf("x 是 bool 或 string 型" )
default:
fmt.Printf("未知型")
}
}
- fallthrough : 使用 fallthrough 會強制執行后面的 case 陳述句,fallthrough 不會判斷下一條 case 的運算式結果是否為 true,
- 實體3:
package main
import "fmt"
func main() {
switch {
case false:
fmt.Println("1、case 條件陳述句為 false")
fallthrough
case true:
fmt.Println("2、case 條件陳述句為 true")
fallthrough
case false:
fmt.Println("3、case 條件陳述句為 false")
fallthrough
case true:
fmt.Println("4、case 條件陳述句為 true")
case false:
fmt.Println("5、case 條件陳述句為 false")
fallthrough
default:
fmt.Println("6、默認 case")
}
}
- 以上代碼執行結果為:
2、case 條件陳述句為 true
3、case 條件陳述句為 false(注意這里!)
4、case 條件陳述句為 true
-
從以上代碼輸出的結果可以看出:switch 從第一個判斷運算式為 true 的 case 開始執行,如果 case 帶有 fallthrough,程式會繼續執行下一條 case,且它不會去判斷下一個 case 的運算式是否為 true,
-
可用 break 終止switch 陳述句,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/280257.html
標籤:區塊鏈
