Go語言學習筆記 三 控制結構 內建函式

2022-04-10 12:22:37 字數 2766 閱讀 5487

日期:2023年7月21日

一、控制結構

1、go中,只有幾個控制結構,它沒有do或者while迴圈,有for,靈活的switch語句和if,在switch中可以接受像for那樣可選的初始化語句,另外go中還提供了型別選擇和多路通訊轉接器的select。go的控制結構的語法和c相比有所不同,它不需要圓括號,但語句體必須總是包含在大括號內。

2、控制結構語法

1)if-else

(1)if後緊跟單個條件

例如:if x > 0 else

(2)if後接受初始化語句

例如: m1:=7

if n1:=9; n1 >= m1

(3)if後緊跟邏輯運算子

例如:if true && true

if語句體中,語句體結束於break、continue、goto、return,這和其它語言沒什麼區別。

2)goto

go中支援goto語句,不過使用的時候要多加小心。

例如:func gotodemo() (string)

fmt.println(i)

i++goto gotohere  //goto跳轉至函式定義的標籤處

}3)for

go語言中,for控制結構的功能相對來說較為強大,它可以完成c語言中for的功能,也能完成while的功能,當然我並不知道這門語言的設計者為什麼要改變我們在其它語言中的通用性的使用習慣,但我覺得我喜歡這種風格,少即是多,如果能通過乙個關鍵字來實現多種效果,又何必多增加乙個關鍵字呢?google對go語言的設計思路和其本身遵從「更少點=簡單」的理念是一致的。

for迴圈的三種形式:

(1)for init ; condition ; post {}  //同c中的for

(2)for condition {} //同while

(3)for {} //死迴圈

4)break和continue

break用來終止迴圈,continue用來終止當前迴圈

例如:func breakdemo()

fmt.println(i)

}tag:for i := 0; i < 10 ; i++

fmt.println(i)}}

func continuedemo()

fmt.println("continue")}}

5)range

range可以用於迴圈,range 是個迭代器,當被呼叫的時候,從它迴圈的內容中返回乙個鍵值對,基於 不同的內容,range 返回不同的東西。

例如:func rangedemo()

for k, v := range list

}列印:

k=0v=a

k=1v=b

k=2v=c

當對 slice 或者 array 做迴圈時,range 返回序號作為鍵,這個序號對應的內容作為值。 上述迴圈中k值變化範圍是0~2,v值的變化範圍是"a"~"c"。

range還可以直接使用在字串的遍歷中,字串被打散成獨立的unicode字元,例如:

for pos,char := range "abcd"

列印:character 'a' starts at byte position 0

character 'b' starts at byte position 1

character 'c' starts at byte position 2

character 'd' starts at byte position 3

6)switch

go的switch非常靈活,表示式不必是常量或整數,執行的過程從上至下,直到找 到匹配項,而如果 switch 沒有表示式,它會匹配 true 。

例如:func switchdemo()

}現在,我們來對switch中len的值來進行分析:

(1)假如len := 0,列印結果:len=0

(2)假如len := 1,列印結果:len=1 

len=2

為什麼不滿足的case 2,也會執行呢?這是因為我們使用了fallthrough關鍵字,它會強制case 2中的語句得以執行。

(3)假如len := 3或len := 4,列印結果len=3 or len=4,case中多個條件的判斷使用","隔開,各個條件之間的關係是"or"的關係。

(4)假如len不是0~4中任何乙個值,那麼就會執行default條件中的語句,列印出:default。

二、內建函式

在go中提供了少數內建函式,它們可以在不用匯入任何包的情形下使用,下圖中列出了go中的內建函式:

內建函式的用途簡介:

close :用於 channel 通訊。使用它來關閉 channel。 

delete :用於在 map 中刪除例項。 

len 和 cap :可用於不同的型別,len 用於返回字串、slice 和陣列的長度。

new :用於各種型別的記憶體分配。

make :用於內建型別(map、slice 和 channel)的記憶體分配。

copy :用於複製 slice。參閱本章的 「slice」。 

panic 和 recover :用於異常處理機制。

print 和 println :是底層列印函式,可以在不引入 fmt 包的情況下使用。它們主要用於除錯。 

complex、real 和 imag :全部用於處理 複數。有了之前給的簡單的例子,不用再進一步討論複數了。

Go語言學習筆記(三)Go語言流程控制

a 格式1 if 表示式1 else if 表示式2 else b 格式2 if 語句1 條件表示式 注意 a 左花括號 for i 19 for i 0 i 12 i for 初 始語 句 用於執行變數初始化,如果變數在此處宣告,那麼該變數的作用於將被侷限在這個for迴圈內 條件表示式 控制是否迴...

Go語言學習筆記 內建函式

go中的預定義函式 go中的預定義函式 close newpanic complex delete make recover real lenprint imag capcopy printlnclose 用於channel的通訊,使用它來關閉channel delete 用於map中刪除例項 le...

GO語言學習筆記(三)流控制 函式

golang精簡了控制語句,但足夠我們使用。if.else 語句需要注意一點的是對初始化語句的支援。if x xtest x 0switch.case語句同樣對初始化語句支援,此外不能出現重複的cacs值,單個case支援多條件匹配。switch可以省略條件表示式,預設為true。package m...