這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在Go語言中只有很少的幾個控制結構,它沒有while或者do-while迴圈。
但是它有for、switch、if。而且switch接受像for那樣可選的初始化語句。下面來認識一下他們
一、if語句
Go語言中的if像下面這個樣子:
if x > 0 { return y} else { return x}
一般不需要加圓括弧,不過,如果你寫上,也是沒有問題的(親測,寫上圓括弧也可以的~~)。比如:
if (3>2) { fmt.Println("test if")}else if true { fmt.Println("test else if")}else{ fmt.Println("test else")}//輸出 test if
二、switch語句
Go的switch非常靈活。運算式不必是常量或整數。
而在java中switch後面的括弧裡面只能放int類型的值,注意是只能放int類型,但是放byte,short,char類型的也可以,
那是因為byte,short,shar可以自動提升(自動類型轉換)為int,也就是說,你放的byte,short,shar類型,然後他們會自動轉換為int類型(寬化,自動轉換並且安全),
其實最後放的還是int類型!
switch語句執行的過程從上至下,直到找到匹配項,匹配項後面也不需要再加break(又跟java不一樣哦!)
func switchFuncString(a string) { //字串 switch a { case "test1": fmt.Println("test1") case "test2", "test3": fmt.Println("testOhter") default: fmt.Println("NoTest") }}func switchFuncInt(a int) { //數字 switch a { case 1: fmt.Println("1") case 2: fmt.Println("2") case 3: fmt.Println("3") }}func switchFuncBool(c byte) { //switch後面什麼都沒有?它會匹配true switch { case '0' <= c && c <= '9': fmt.Println(c - '0') case 'a' <= c && c <= 'f': fmt.Println( c - 'a' + 10) case 'A' <= c && c <= 'F': fmt.Println( c - 'A' + 10) }}
但是如果,你就希望匹配之後,繼續匹配下面一條怎麼辦呢?還是有辦法的,使用“fallthrough”即可,例如:
func switchFuncInt(a int) { //數字 switch a { case 1: fmt.Println("1") fallthrough case 2: fmt.Println("2") case 3: fmt.Println("3") }}
調用switchFuncInt(1),列印出1和2來。
三、for迴圈
Go語言的For迴圈油3中形式,只有其中的一種使用分號。
- for init; condition; post { } 和C 的for 一樣
- for condition { } 和while 一樣
- for { } 和C 的for(;;) 一樣(死迴圈)
直接上代碼~~
package mainimport "fmt"func main() { simpleFor() var test string = "asdfghjkl" fmt.Println(reverse([]byte(test)))}//列印0~9func simpleFor() { for i := 0; i < 10; i++ { fmt.Println(i) }}// Reverse afunc reverse(a []byte) string { //由於Go沒有逗號運算式,而++和--是語句而不是運算式, //如果你想在for中執行多個變數,應當使用平行賦值。 for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 { a[i], a[j] = a[j], a[i] } return string(a)}
分支、迴圈是很基礎的東西,所以有必要多練練手~~
下面來做兩個題目玩玩~~
1. 建立一個基於for的簡單的迴圈。使其迴圈10次,並且使用fmt 包列印出計數器的值。
2. 用goto改寫1的迴圈。保留字for不可使用。
3. 再次改寫這個迴圈,使其遍曆一個array,並將這個array列印到螢幕上。
代碼: