網站首頁 編程語言 正文
條件語句需要開發者通過指定一個或多個條件,并通過測試條件是否為 true 來決定是否執行指定語句,并在條件為 false 的情況在執行另外的語句。
Go 語言提供了以下幾種條件判斷語句:
語句 | 描述 |
---|---|
if 語句 | if 語句 由一個布爾表達式后緊跟一個或多個語句組成。 |
if...else 語句 | if 語句 后可以使用可選的 else 語句, else 語句中的表達式在布爾表達式為 false 時執行 |
if 嵌套語句 | 你可以在 if 或 else if 語句中嵌入一個或多個 if 或 else if 語句。 |
switch 語句 | switch 語句用于基于不同條件執行不同動作。 |
select 語句 | select 語句類似于 switch 語句,但是select會隨機執行一個可運行的case。如果沒有case可運行,它將阻塞,直到有case可運行。 |
if語句
if 語句由布爾表達式后緊跟一個或多個語句組成。
語法
Go 編程語言中 if 語句的語法如下:
if 布爾表達式 { /* 在布爾表達式為 true 時執行 */ }
If 在布爾表達式為 true 時,其后緊跟的語句塊執行,如果為 false 則不執行。
實例
使用 if 判斷一個數變量的大小:
package main import "fmt" func main() { /* 定義局部變量 */ var a int = 10 /* 使用 if 語句判斷布爾表達式 */ if a < 20 { /* 如果條件為 true 則執行以下語句 */ fmt.Printf("a 小于 20\n" ) } fmt.Printf("a 的值為 : %d\n", a) }
以上代碼執行結果為:
a 小于 20 a 的值為 : 10
if...else 語句
if 語句 后可以使用可選的 else 語句, else 語句中的表達式在布爾表達式為 false 時執行。
語法
Go 編程語言中 if...else 語句的語法如下:
if 布爾表達式 { /* 在布爾表達式為 true 時執行 */ } else { /* 在布爾表達式為 false 時執行 */ }
If 在布爾表達式為 true 時,其后緊跟的語句塊執行,如果為 false 則執行 else 語句塊。
實例
使用 if else 判斷一個數的大小:
package main import "fmt" func main() { /* 局部變量定義 */ var a int = 100; /* 判斷布爾表達式 */ if a < 20 { /* 如果條件為 true 則執行以下語句 */ fmt.Printf("a 小于 20\n" ); } else { /* 如果條件為 false 則執行以下語句 */ fmt.Printf("a 不小于 20\n" ); } fmt.Printf("a 的值為 : %d\n", a); }
以上代碼執行結果為:
a 不小于 20 a 的值為 : 100
if 語句嵌套
你可以在 if 或 else if 語句中嵌入一個或多個 if 或 else if 語句。
語法
Go 編程語言中 if...else 語句的語法如下:
if 布爾表達式 1 { /* 在布爾表達式 1 為 true 時執行 */ if 布爾表達式 2 { /* 在布爾表達式 2 為 true 時執行 */ } }
你可以以同樣的方式在 if 語句中嵌套 else if...else 語句
實例
嵌套使用 if 語句:
package main import "fmt" func main() { /* 定義局部變量 */ var a int = 100 var b int = 200 /* 判斷條件 */ if a == 100 { /* if 條件語句為 true 執行 */ if b == 200 { /* if 條件語句為 true 執行 */ fmt.Printf("a 的值為 100 , b 的值為 200\n" ); } } fmt.Printf("a 值為 : %d\n", a ); fmt.Printf("b 值為 : %d\n", b ); }
以上代碼執行結果為:
a 的值為 100 , b 的值為 200 a 值為 : 100 b 值為 : 200
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。
流程圖:
實例
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); /* 你可以定義任意個數的case */ default: /* 可選 */ statement(s); }
實例
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 func(int) float64: fmt.Printf("x 是 func(int) 型") case bool, string: fmt.Printf("x 是 bool 或 string 型" ) default: fmt.Printf("未知型") } }
以上代碼執行結果為:
x 的類型 :<nil>
fallthrough
使用 fallthrough 會強制執行后面的 case 語句,fallthrough 不會判斷下一條 case 的表達式結果是否為 true。
實例
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。
select 語句
select 是 Go 中的一個控制結構,類似于用于通信的 switch 語句。每個 case 必須是一個通信操作,要么是發送要么是接收。
select 隨機執行一個可運行的 case。如果沒有 case 可運行,它將阻塞,直到有 case 可運行。一個默認的子句應該總是可運行的。
語法
Go 編程語言中 select 語句的語法如下:
select { case communication clause : statement(s); case communication clause : statement(s); /* 你可以定義任意數量的 case */ default : /* 可選 */ statement(s); }
以下描述了 select 語句的語法:
- 每個 case 都必須是一個通信
- 所有 channel 表達式都會被求值
- 所有被發送的表達式都會被求值
- 如果任意某個通信可以進行,它就執行,其他被忽略。
- 如果有多個 case 都可以運行,Select 會隨機公平地選出一個執行。其他不會執行。
否則:
-
如果有 default 子句,則執行該語句。
如果沒有 default 子句,select 將阻塞,直到某個通信可以運行;Go 不會重新對 channel 或值進行求值。
實例
select 語句應用演示:
package main import "fmt" func main() { var c1, c2, c3 chan int var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } }
以上代碼執行結果為:
no communication
校內舉辦跑步比賽,10s內進去比賽,分性別,進入男子組,女子組
package main import "fmt" //if語句嵌套 //校內舉辦跑步比賽,10s內進去比賽,分性別,進入男子組,女子組 func main() { var ( a = 9 b = "男" ) if a < 10 && b == "男" { fmt.Println("進去決賽") fmt.Println("進入男子") } if a < 10 && b == "女" { fmt.Println("進去決賽") fmt.Println("進入女子組") } if a > 10 { fmt.Println("滾") } /* if a < 10 { fmt.Println("進去決賽") if b == "男" { fmt.Println("進入男子") } else { fmt.Println("進入女子") } } else { fmt.Println("滾") }*/ } //switch語句,對學生成績進行考評,90-100:優秀,80-89:良好,60-79及格,60以下,不及格 package main import "fmt" func main() { var vaule = 1 switch vaule { case 1: fmt.Println("1") case 2: fmt.Println("2") case 3: fmt.Println("3") default: fmt.Println("滾犢子") } /* var a = 77 //等效于if else 語句 switch { case a >= 90 && a <= 100: fmt.Println("好") case a >= 80 && a <= 89: fmt.Println("還行") case a >= 60 && a <= 79: fmt.Println("合格") default: fmt.Println("不合格") }*/ }
原文鏈接:https://www.cnblogs.com/lvrui/p/16027123.html
相關推薦
- 2022-10-14 TorchServe部署yolov5項目(Docker篇)
- 2022-07-01 react-router-dom?V6的配置使用實踐_React
- 2022-09-05 Shiro 和 Spring Security 的比較
- 2022-04-19 C#使用CancellationTokenSource?取消?Task的方法_C#教程
- 2022-11-14 Go語言Goroutinue和管道效率詳解_Golang
- 2022-05-12 Natapp(Ngrok) Windows下注冊為服務,開機啟動&后臺運行
- 2022-04-12 iOS?block的值捕獲與指針捕獲詳解_IOS
- 2022-10-03 react事件對象無法獲取offsetLeft,offsetTop,X,Y等元素問題及解決_Reac
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支