1. 程式人生 > 其它 >8.16Go之迴圈語句

8.16Go之迴圈語句

8.16Go之迴圈語句

Go提供的迴圈結構:

  • for迴圈

  • 巢狀迴圈


如表所示:

迴圈型別描述
[for 迴圈] 重複執行語句塊
[迴圈巢狀] 在 for 迴圈中巢狀一個或多個 for 迴圈

for迴圈

Go語言的for迴圈提供了三種形式

普通for迴圈

Java表示方式:

for (int i=0; i<10; i++){
}

go表示方式:

for i := 0; i < 10; i++{
}
//語法格式為
for init; condition; post { }
  • init: 一般為賦值表示式,給控制變數賦初值;

  • condition: 關係表示式或邏輯表示式,迴圈控制條件;

  • post: 一般為賦值表示式,給控制變數增量或減量。

類似while迴圈

Java表示方式:

while(表示式判斷){
}

go表示方式:(和C語言的while一樣)

package main

import "fmt"

var (
cirCula bool
)

func main() {
cirCula = true
for cirCula == true {
fmt.Println("這是一個真值,其值為:", cirCula)
break
}
fmt.Println("這不是一個真值,其值為:", cirCula)
}
類似C的for(;;)
package main

import "fmt"

func main() {
i := 0
for {
i++
fmt.Println(i)
if i == 65535 {
fmt.Println("收工!!!")
break
}
}
}
for 迴圈的 range 格式可以對 slice、map、陣列、字串等進行迭代迴圈。

類似Java,但又不同

public class PracticeCirculation{
private static int[] intArray = new int[]{3,5,7,9};
public static void main(String[] args){
for(int num : intArray){
System.out.Println(num);
}
}
}

go表示:

for key, value := range oldMap {
newMap[key] = value
}
//對字串、陣列、切片等進行迭代輸出元素。
//go中的key, value是同時將兩個變數變成oldMap裡面的key值和value值

以陣列舉例:

package main

import "fmt"

var (
intArray [4]int
)

func main() {
//建立一個四個儲存空間的陣列
intArray = [4]int{3,5,7,9}

//使用range格式
for key, number := range intArray{
intArray[key] = number
fmt.Println(intArray[key]) //intArray陣列0號索引的值,key為索引號
fmt.Println(number) //number為值本身
}

numbers := [6]int{1,2,3,4,5,6}
for i, j := range numbers{
fmt.Println("第 %d 位的x的值為 %d\n", i, j)
}
}

程式碼分析:

在第二個range迴圈當中
i為索引
j為索引下對應的值
這是定義了兩個變數

go的for-each--->range迴圈:這種格式的迴圈可以對字串、陣列、切片等進行迭代輸出元素。

for語句執行過程分析:

  • 1、先對錶達式 1 賦初值;

  • 2、判別賦值表示式 init 是否滿足給定條件

    • 若其值為真,滿足迴圈條件,則執行迴圈體內語句,然後執行 post,進入第二次迴圈,再判別 condition;

    • 否則判斷 condition 的值為假,不滿足條件,就終止for迴圈,執行迴圈體外語句。

巢狀迴圈

以氣泡排序舉例:

	for i := 0; i < len(numbers); i++ {
for j := 0; j < len(numbers)-1-i; j++ {
if numbers[j] > numbers[j+1] {
//設定中間變數
temp := numbers[j]
numbers[j] = numbers[j+1]
numbers[j+1] = temp
}
}
}
for i, j := range numbers{
fmt.Println("索引",i, "對應的值為", j)
}

迴圈控制語句

go語言提供了C語言中的goto語句,使得程式碼變得更靈活:

迴圈控制語句可以控制迴圈體內語句的執行過程。

控制語句描述
[break 語句] 經常用於中斷當前 for 迴圈或跳出 switch 語句
[continue 語句] 跳過當前迴圈的剩餘語句,然後繼續進行下一輪迴圈。
[goto 語句] 將控制轉移到被標記的語句。

重點介紹goto語句

特點:

  • goto 語句可以無條件地轉移到過程中指定的行

壞處:

  • 結構化程式設計中一般不主張使用 goto 語句, 以免造成程式流程的混亂,使理解和除錯程式都產生困難。

語法:

goto label;
..
.
label: statement;

特點:

  • Java當中雖然移除了goto語句,但是提供了label的方法來變相實現goto語句

    • package PracticeReview.Algorithm;

      /**
      * 使用Label的方式實現C中的goto語句
      * @since JDK 1.8
      * @date 2021/08/16
      * @author Lucifer
      */
      public class GoToCirculation {
      private static int intArray = 10;
      public static void goToLabel(int arr){
      Loop:
      while (intArray<20){
      if (intArray==15){
      //自增
      intArray += 1;
      continue Loop;
      }
      System.out.println(intArray);
      intArray++;
      }
      }
      }
    • 通過加標籤label的方式來實現

  • go語言直接使用關鍵字+標籤的形式更加直觀的體現出來:

	num := 10
Loop:
for num < 20 {
if num == 15 {
//自增,回到標籤處
num += 1
goto Loop
}
fmt.Println(num)
num++
}

無限迴圈

迴圈中條件語句永遠不為 false 則會進行無限迴圈

package main

import "fmt"

func main() {
for true {
fmt.Printf("這是無限迴圈。\n");
}
}
It's a lonely road!!!