網站首頁 編程語言 正文
GO語言的控制語句
判斷結構:if-else
和大多數編程語言一樣,if-else的用法基本都一樣,直接來一個GO語言的例子
package main import ( "fmt" ) func main( var str string = "A" if str=="A"{ fmt.Println("匹配成功") }else{ fmt.Println("匹配失敗") } )
輸出為:匹配成功
如果更改了str
的值,那么輸出就是匹配失敗
,這就是一個最簡單的判斷語句,還有一些復雜的,在以后的程序中遇到了在說(完整的if-else可能要講一大章)
switch 結構
將某些特點的某個變量進行匹配相對應的值,省去if-else不的結構,以更清晰可讀的方式來展現,一個完整的例子
package main import( "fmt" ) func main( var num int = 20 switch num{ case 10: fmt.Println("num = 10") case 20: fmt.Println("num = 20") case 30: fmt.Println("num = 30") default: fmt.Println("default = 0") } )
輸出:
num = 20
補充說明:
在GO語言中,不用使用
break
來進行結束當前執行塊,程序會自動匹配完全成后結束;
那么問題來了,如果不想結束匹配呢?在GO語言中,使用fallthrough
關鍵字來繼續匹配如:
var num int = 20 switch num{ case 10: fmt.Println("num = 10") case 20: fmt.Println("num = 20") fallthrough case 30: fmt.Println("num = 30") default: fmt.Println("default = 0") }
程序會輸出:
num = 20 num = 30
思考:在什么時候用swithc,什么時候用if-else?可以自己寫一點小DEMO來測試下這兩種判斷語句結構
循環控制結構 for
在GO語言中,循環只有for
這一個關鍵字,實現多種循環結構,省去了其它語言的比如:while
,do-while
,foreach
,所以for
的功能更加靈活
1. for的第一種形式
和大多數其它語言一樣,基本形式是:
for 初始化語句; 條件語句; 修飾語句 {}
一個完整的例子
package main import( "fmt" ) func main(){ var num int = 5 for i:=0;i<num;i++{ fmt.Printf("num index id %d \n", i) } }
輸出為:
num index id 0 num index id 1 num index id 2 num index id 3 num index id 4
補充:GO語言中的for循環是不用在判斷部分加上()
來進行包裹起來的
練習題:用GO的循環打印下面的格式
G GG GGG GGGG GGGGG
代碼:
package main import( "fmt" ) func main(){ for i := 0; i < 5; i++ { G := "" for j := 0; j < i; j++ { G += "G" } fmt.Println(G + "G") } }
2. for的第二種形式
這種格式在某種程度上面說:其實就是其它語言的do-while
循環,只不過GO將這種循環全部都用for
來實現了
for 條件語句 {}
一個完整的例子:
package main import( "fmt" ) func main(){ var num_2 int = 5 for num_2 > 0 { fmt.Printf("num_is is %d \n", num_2) num_2-- } }
輸出為:
num_is is 5 num_is is 4 num_is is 3 num_is is 2 num_is is 1
3. for的第三種形式
這種形式,我一般叫它無限循環,寫這種形式的時候,一定要注意使用break
,return
等關鍵字,因為一不小心就會寫成死循環
for { } 或 for ;; { }或 for true { }
一個完整的例子
package main import( "fmt" ) func main(){ var num_3 int = 5 for { if num_3 < 0 { break //把這一行給注釋看看 } fmt.Printf("num_3 is %d \n", num_3) num_3-- } }
輸出為:
num_3 is 5 num_3 is 4 num_3 is 3 num_3 is 2 num_3 is 1 num_3 is 0
4. for的四種形式
這種形式就類似于其它語言的foreach
關鍵字,進行多層循環
for ix, val := range coll { }
一個完整的例子
package main import( "fmt" ) func main(){ strs := "Hello World!例子" for ins, char := range strs { fmt.Printf("str is index %d,value is %c \n", ins, char) } }
輸出:
str is index 0,value is H str is index 1,value is e str is index 2,value is l str is index 3,value is l str is index 4,value is o str is index 5,value is str is index 6,value is W str is index 7,value is o str is index 8,value is r str is index 9,value is l str is index 10,value is d str is index 11,value is ! str is index 12,value is 例 str is index 15,value is 子
對,你沒看錯,GO會自動識別中文,常用的英文字母,數字為1個字節,中文或其它字符占2-3個字節
控制語句常用關鍵字
break
結束當前判斷或循環,執行下面的代碼
continue
結束當次判斷或循環,開始下次的判斷或循環
return
返回當前函數,下面的代碼不在執行
標簽和goto的介紹,有空在介紹(其實是不太鼓勵大家用這個,因為一不小心,作用域看錯了,就會導致死循環,一直在某個標簽里面調用)
指針
- 在GO語言中,提供了控制數據結構的指針的能力,但是,你不能進行指針運算;
- 在GO語言中,用
*
關鍵字來聲明某個變量為指針變量;(例:var p *int) - 在GO語言中,用
&
關鍵字來放到變量前,返回變量的內存地址;(例:p = &變量) - 在GO語言中,格式化標識符為
%p
(例:fmt.Printf("%P",p)) - 一個完整的例子
package main import( "fmt" ) func main( s := "good bye" var p *string = &s *p = "ciao" fmt.Printf("指針地址: %p\n", p) fmt.Printf("指針P的值是: %s\n", *p) fmt.Printf("變量S的值是: %s\n", s) )
輸出為
指針地址: 0x2540820(內存值可能會變) 指針P的值是: ciao 變量S的值是: ciao
為什么變量S的值和指針P的值一樣呢?
答:因為P是指針,是內存地址,當給指針P重新賦值后,P所對應的內存地址的值就變了,而變量S的值所在的內存塊正好是指針P所對應的內存
原文鏈接:https://www.jianshu.com/p/57d5a83221a1
相關推薦
- 2022-03-15 react 編譯警告 chunk common [mini-css-extract-plugin]
- 2022-12-02 C語言#define定義宏的使用詳解_C 語言
- 2022-10-14 wget -c 斷點續傳命令
- 2022-12-04 C#實現Oracle批量寫入數據的方法詳解_C#教程
- 2022-12-13 Python?urllib?入門使用詳細教程_python
- 2022-08-12 Python打包成exe文件的詳細操作指南_python
- 2022-05-20 C++實現商店倉庫管理系統_C 語言
- 2023-02-12 C++?STL之string的模擬實現實例代碼_C 語言
- 最近更新
-
- 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同步修改后的遠程分支