GO流程控制

1. if else

在Go語言中,關鍵字if是用于測試某個條件(布爾型或邏輯型)的語句,如果該條件成立,則會執行 if 后由大括號{}括起來的代碼塊,否則就忽略該代碼塊繼續執行后續的代碼。

if condition {// 條件為真執行
}

condition 稱之為條件表達式或者布爾表達式,執行結果需返回true或false。{ 必須在條件表達式的尾部

x := 0if x <= 0 {fmt.Println("為真進入這里")}

如果存在第二個分支,則可以在上面代碼的基礎上添加 else 關鍵字以及另一代碼塊,這個代碼塊中的代碼只有在條件不滿足時才會執行,if 和 else 后的兩個代碼塊是相互獨立的分支,只能執行其中一個。

if condition {// 條件為真 執行
} else {// 條件不滿足 執行
}

x := 5if x <= 0 {fmt.Println("為真進入這里")//go語言格式要求很嚴,else必須寫在}后面}else{fmt.Println("為假進入這里")}

如果存在第三個分支,則可以使用下面這種三個獨立分支的形式:

if condition1 {// condition1 滿足 執行
} else if condition2 {// condition1 不滿足 condition2滿足 執行
}else {// condition1和condition2都不滿足 執行
}

else if 分支的數量是沒有限制的,但是為了代碼的可讀性,還是不要在 if 后面加入太多的 else if 結構

if語句可以嵌套:

/* 定義局部變量 */var a int = 100var b int = 200/* 判斷條件 */if a == 100 {/* if 條件語句為 true 執行 */if b == 200 {/* if 條件語句為 true 執行 */fmt.Printf("a 的值為 100 , b 的值為 200\n" )}}

1.1 特殊寫法

if 還有一種特殊的寫法,可以在 if 表達式之前添加一個執行語句,再根據變量值進行判斷,代碼如下:

	if a := 10; a > 5 {fmt.Println(a)  //10}

這種寫法可以將返回值與判斷放在一行進行處理,而且返回值的作用范圍被限制在 if、else 語句組合中。

在編程中,變量的作用范圍越小,所造成的問題可能性越小,每一個變量代表一個狀態,有狀態的地方,狀態就會被修改,函數的局部變量只會影響一個函數的執行,但全局變量可能會影響所有代碼的執行狀態,因此限制變量的作用范圍對代碼的穩定性有很大的幫助

2. for

go語言中的循環語句只支持 for 關鍵字,這個其他語言是不同的。

sum := 0
//i := 0; 賦初值,i<10 循環條件 如果為真就繼續執行 ;i++ 后置執行 執行后繼續循環
for i := 0; i < 10; i++ {sum += i
}

第二種寫法:

sum := 0
for {sum++if sum > 100 {//break是跳出循環break}
}

上述的代碼,如果沒有break跳出循環,那么其將無限循環

第三種寫法:

n := 10
for n>0 {n--fmt.Println(n)
}

我們來看下面一種寫法:

step := 2
//初值可以省略,但是;必須有,但是這樣寫step的作用域就比較大了,脫離了for循環
for ; step > 0; step-- {fmt.Println(step)
}

進一步簡化代碼,將 if 判斷整合到 for 中,變為下面的代碼:

step := 2
for step > 0 {step--fmt.Println(step)
}

結束循環的方法:break,return,goto,panic

其中,return和panic不會執行循環之后的語句,break會繼續執行


3. for range

for range 結構是Go語言特有的一種的迭代結構,for range 可以遍歷數組、切片、字符串、map 及管道(channel)

for key, val := range coll {...
}

val 始終為集合中對應索引的值拷貝,因此它一般只具有只讀性質,對它所做的任何修改都不會影響到集合中原有的值

	str := "你好呀"for k, v := range str {fmt.Println(k, string(v))}

通過 for range 遍歷的返回值有一定的規律:

  • 數組、切片、字符串返回索引和值。
  • map 返回鍵和值。
  • channel只返回管道內的值。

以下和c無太大區別

4. switch

go里面switch默認相當于每個case最后帶有break,匹配成功后不會自動向下執行其他case,而是跳出整個switch, 那么如何做到執行完一個case之后,進入下一個case而不是跳出swtich呢?

答案是:fallthrough

var s = "hello"
switch {
case s == "hello":fmt.Println("hello")fallthrough
case s != "world":fmt.Println("world")
}


5. goto

goto 語句通過標簽進行代碼間的無條件跳轉

使用 goto 退出多層循環

使用 goto 集中處理錯誤

6. break

break 語句可以結束 for、switch 和 select 的代碼塊,另外 break 語句還可以在語句后面添加標簽,表示退出某個標簽對應的代碼塊,標簽要求必須定義在對應的 for、switch 和 select 的代碼塊上。


func main() {
OverLoop:for i := 0; i < 2; i++ {for j := 0; j < 5; j++ {switch j {case 2:fmt.Println(i, j)break OverLoopcase 3:fmt.Println(i, j)break OverLoop}}}
}
//0 2

7. continue

continue 語句可以結束當前循環,開始下一次的循環迭代過程,僅限在 for 循環內使用,在 continue 語句后添加標簽時,表示開始標簽對應的循環

package main
import "fmt"
func main() {
OuterLoop:for i := 0; i < 2; i++ {for j := 0; j < 5; j++ {switch j {case 2:fmt.Println(i, j)continue OuterLoop}}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715489.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qwen.cpp

1、Release模式 git clone --recursive https://github.com/QwenLM/qwen.cpp && cd qwen.cpp git submodule update --init --recursive python3 qwen_cpp/convert.py -i /mnt/workspace/qwen.cpp/Qianwen/qwen/Qwen-7B-Chat -t q4_0 -o qwen7b-ggml.bincmake -B buil…

什么是MAC地址? win10電腦查看MAC地址的多種方法

您是否知道連接到家庭網絡的每件硬件都有自己的身份&#xff1f;正如每個設備都分配有自己的 IP 地址一樣&#xff0c;每個硬件都有一個唯一的網絡標識符。 該標識符稱為MAC 地址。MAC 代表媒體訪問控制。您可能需要 MAC 地址來解決網絡問題或配置新設備。在 Windows 中查找您…

three.js 點乘判斷平行向量方向異同

效果&#xff1a; 代碼&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div>判斷的前提是兩個向量平行<el-button click"judge"…

一文掌握大模型提示詞技巧:從戰略到戰術

作者&#xff1a;明明如月學長&#xff0c; CSDN 博客專家&#xff0c;大廠高級 Java 工程師&#xff0c;《性能優化方法論》作者、《解鎖大廠思維&#xff1a;剖析《阿里巴巴Java開發手冊》》、《再學經典&#xff1a;《Effective Java》獨家解析》專欄作者。 熱門文章推薦&am…

pytest 的 request fixture:實現個性化測試需求

在前文章中&#xff0c;我們看到pytest_repeat源碼中有這樣一段 pytest.fixture def __pytest_repeat_step_number(request):marker request.node.get_closest_marker("repeat")count marker and marker.args[0] or request.config.option.count......看到參數為r…

Stable Cascade又升級了,現在只需要兩個模型

Stable Cascade這個模型&#xff0c;大家如果還有印象的話&#xff0c;是需要下載三個模型的&#xff0c;分別是Stage_a,Stage_b和Stage_c,如果全都下載下來&#xff0c;需要20多個G&#xff0c;但是最近使用ComfyUI做嘗試的時候&#xff0c;發現官方的案例中已經沒有用到單獨的…

手擼AI-2: 設置腳本參數與設置隨機種子

一.設置腳本參數 1. 代碼示例 在完整的模型訓練代碼中,我們時常能看到通過python train.py --params 來訓練模型,這也是在無UI界面的服務器上訓練模型最主要的方法,因此使用腳本并設置腳本參數尤為重要. 我們通常會將腳本設置的代碼寫在config,py中,再用訓練主函數main.py進行…

P4715 【深基16.例1】淘汰賽題解

題目 有&#xff08;n≤7&#xff09;個國家參加世界杯決賽圈且進入淘汰賽環節。已經知道各個國家的能力值&#xff0c;且都不相等。能力值高的國家和能力值低的國家踢比賽時高者獲勝。1號國家和2號國家踢一場比賽&#xff0c;勝者晉級。3號國家和4號國家也踢一場&#xff0c;…

C++用臨時對象構造新對象

C用臨時對象構造新對象 //用臨時對象構造同類型的新對象&#xff0c;該臨時對象不產生&#xff1b; // 直接用生成臨時對象的方法構造新對象&#xff0c;這是編譯器對代碼的優化&#xff0c;效率更高 #include<iostream> using namespace std; class MyClass { public:…

Golang 調度器 GPM模型

Golang 調度器 GPM模型 1 多進程/線程時代有了調度器需求 在多進程/多線程的操作系統中&#xff0c;就解決了阻塞的問題&#xff0c;因為一個進程阻塞cpu可以立刻切換到其他進程中去執行&#xff0c;而且調度cpu的算法可以保證在運行的進程都可以被分配到cpu的運行時間片。這…

chatgpt:還有哪些人工智能和科技值得關注?

今天&#xff0c;很多人的目光都被ChatGPT吸引&#xff0c;其實&#xff0c;人工智能的范圍很大&#xff0c;遠不止ChatGPT或者其他自然語言的處理工具。所以說不管ChatGPT的結果如何&#xff0c;人工智能依然是未來。 那么在ChatGPT之外&#xff0c;還有沒有什么值得關注的人…

在網頁上踢球:打造我自己的python(Django)足球網站

足球不僅僅是球場上的90分鐘。它是一個不斷發展的故事&#xff0c;一個全球球迷社群的粘合劑&#xff0c;一個數據和熱情交織的世界。作為一名開發者和球迷&#xff0c;我決定將這兩大愛好結合起來&#xff0c;用 Django 打造一個足球網站&#xff0c;讓球迷們能夠追蹤他們最愛…

Unity AI生成全景圖制作天空盒

現在的AI很強大。 其中&#xff0c;有這樣一個網站&#xff0c;通過輸入提示詞&#xff0c;選擇某種風格就可以為你生成360全景圖。 網頁鏈接 一、生成全景圖 打開網頁后&#xff0c;如圖&#xff1a; 勾選&#xff0c;點擊CONFIRM。 點擊GET STARTED&#xff0c;進入主頁。…

機器人定位——里程計Odom

根據兩個車輪的輪速去估計當前的車的定位 我將提供一個更詳細完整的模型來描述兩輪差速機器人的里程計數。 我們假設機器人的兩個輪子的半徑分別為r1和r2&#xff0c;兩個輪子的轉速分別為ω1和ω2。機器人的輪距為L&#xff0c;指的是兩個輪子中心之間的距離。 首先&#x…

Git LFS配置

當你需要克隆一個包含通過 Git Large File Storage (LFS) 管理的大文件的倉庫時&#xff0c;確保 Git LFS 已經在你的系統上安裝并正確配置是很重要的。這樣&#xff0c;當你執行 git clone 命令時&#xff0c;Git LFS 跟蹤的文件也會被正確地下載。以下是在 macOS 上進行配置和…

Stable Cascade-ComfyUI中文生圖、圖生圖、多圖融合基礎工作流分享

最近 ComfyUI對于Stable Cascade的支持越來越好了一些&#xff0c;官方也放出來一些工作流供參考。 這里簡單分享幾個比較常用的基礎工作流。 &#xff08;如果還沒有下載模型&#xff0c;可以先閱讀上一篇Stable Cascade升級&#xff0c;現在只需要兩個模型&#xff09; &a…

python數據分析numpy基礎之argmax求數組最大值索引

1 python數據分析numpy基礎之argmax求數組最大值索引 python的numpy庫的argmax()函數&#xff0c;用于獲取沿指定軸的最大值的索引。 用法 numpy.argmax(a, axisNone, outNone, *, keepdims<no value>)描述 argmax()返回沿指定軸的最大值的索引。 入參axis表示指定軸…

Docker技術概論(5):Docker網絡

Docker技術概論&#xff08;5&#xff09; Docker網絡 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog…

基于QT和Visa的安捷倫(keysight)34970A溫度采集

在以前的文章中&#xff0c;描述了如何在labview開發讀取34970A儀器采集的溫度。 也描述了如何安裝keysight IO Libraries Suits. 那么本文更進一步&#xff0c;描述QT平臺c語言開發軟件&#xff0c;讀取34970A儀器采集的溫度。 以下是c代碼&#xff0c;因為采集耗費時間長&…

C++虛函數調用規則

C虛函數調用規則 基類、派生類結構&#xff1a; class Foo { public:virtual void print() {cout << "Foo" << endl;} }; class Bar : public Foo { public:virtual void print() {cout << "Bar" << endl;} };1.通過對象直接調用…