go語言學習之路(二)


Go 語言條件語句

條件語句需要開發者通過指定一個或多個條件,並通過測試條件是否為 true 來決定是否執行指定語句,並在條件為 false 的情況在執行另外的語句。

下圖展示了程序語言中條件語句的結構:

Go 語言提供了以下幾種條件判斷語句:

  • if語句             -->   if 語句 由一個布爾表達式后緊跟一個或多個語句組成

  • if嵌套語句    -->   你可以在 if 或 else if 語句中嵌入一個或多個 if 或 else if 語句。

  • if .. else         -->   if 語句 后可以使用可選的 else 語句, else 語句中的表達式在布爾表達式為 false 時執行。

  • switch語句      -->   switch 語句用於基於不同條件執行不同動作。

  • select語句       -->   select 語句類似於 switch 語句,但是select會隨機執行一個可運行的case。如果沒有case可運行,它將阻塞,直到有case可運行。

一、if語句

if 語句由布爾表達式后緊跟一個或多個語句組成。

1、語法

Go 編程語言中 if 語句的語法如下:

if(布爾表達式)
{
   /* 在布爾表達式為 true 時執行 */
}

2、實例

package main
 
import "fmt"
 
func main() {
   /* 定義局部變量 */
   var a int = 10
 
   /* 使用 if 語句判斷布爾表達式 */
   if( a < 20 ) {
       /* 如果條件為 true 則執行以下語句 */
       fmt.Printf("a 小於 20\n" )
   }
   fmt.Printf("a 的值為 : %d\n", a)
}

二、if .. else語句

if 語句 后可以使用可選的 else 語句, else 語句中的表達式在布爾表達式為 false 時執行。

1、語法

Go 編程語言中 if...else 語句的語法如下:

if(布爾表達式)
{
   /* 在布爾表達式為 true 時執行 */
}
else
{
  /* 在布爾表達式為 false 時執行 */
}

2、實例

package main
 
import "fmt"
 
func main() {
   /* 局部變量定義 */
   var a int = 100;
 
   /* 判斷布爾表達式 */
   if( a < 20 ) {
       /* 如果條件為 true 則執行以下語句 */
       fmt.Printf("a 小於 20\n" );
   } else {
       /* 如果條件為 false 則執行以下語句 */
       fmt.Printf("a 不小於 20\n" );
   }
   fmt.Printf("a 的值為 : %d\n", a);
 
}

三、switch語句

switch 語句用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上直下逐一測試,直到匹配為止。。

switch 語句執行的過程從上至下,直到找到匹配項,匹配項后面也不需要再加break

1、語法

Go 編程語言中 switch 語句的語法如下:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

變量 var1 可以是任何類型,而 val1 和 val2 則可以是同類型的任意值。類型不被局限於常量或整數,但必須是相同的類型;或者最終結果為相同類型的表達式。

您可以同時測試多個可能符合條件的值,使用逗號分割它們,例如:case val1, val2, val3。

2、實例

package main
 
import "fmt"
 
func main() {
   /* 定義局部變量 */
   var grade string = "B"
   var marks int = 90
 
   switch marks {
      case 90: grade = "A"
      case 80: grade = "B"
      case 50,60,70 : grade = "C"
      default: grade = "D"  
   }
 
   switch {
      case grade == "A" :
         fmt.Printf("優秀!\n" )     
      case grade == "B", grade == "C" :
         fmt.Printf("良好\n" )      
      case grade == "D" :
         fmt.Printf("及格\n" )      
      case grade == "F":
         fmt.Printf("不及格\n" )
      default:
         fmt.Printf("差\n" );
   }
   fmt.Printf("你的等級是 %s\n", grade );      
}

四、Type Switch

switch 語句還可以被用於 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。

1、Type Switch 語法格式:

switch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    /* 你可以定義任意個數的case */
    default: /* 可選 */
       statement(s);
}

2、實例:

package main
 
import "fmt"
 
func main() {
   var x interface{}
     
   switch i := x.(type) {
      case nil:      
         fmt.Printf(" x 的類型 :%T",i)                
      case int:      
         fmt.Printf("x 是 int 型")                          
      default:
         fmt.Printf("未知型")     
   }   
}

五、select語句

select是Go中的一個控制結構,類似於用於通信的switch語句。每個case必須是一個通信操作,要么是發送要么是接收。

select隨機執行一個可運行的case。如果沒有case可運行,它將阻塞,直到有case可運行。一個默認的子句應該總是可運行的。

1、語法

Go 編程語言中 select 語句的語法如下:

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s); 
    /* 你可以定義任意數量的 case */
    default : /* 可選 */
       statement(s);
}

注意:

  • 每個case都必須是一個通信

  • 所有channel表達式都會被求值

  • 所有被發送的表達式都會被求值

  • 如果任意某個通信可以進行,它就執行;其他被忽略。

  • 如果有多個case都可以運行,Select會隨機公平地選出一個執行。其他不會執行。 

  • 否則:
  1. 如果有default子句,則執行該語句。

  2. 如果沒有default字句,select將阻塞,直到某個通信可以運行;Go不會重新對channel或值進行求值。

2、實例

package main
 
import "fmt"
 
func main() {
   var c1, c2, c3 chan int
   var i1, i2 int
   select {
      case i1 = <-c1:
         fmt.Printf("received ", i1, " from c1\n")
      case c2 <- i2:
         fmt.Printf("sent ", i2, " to c2\n")
      case i3, ok := (<-c3):  // same as: i3, ok := <-c3
         if ok {
            fmt.Printf("received ", i3, " from c3\n")
         } else {
            fmt.Printf("c3 is closed\n")
         }
      default:
         fmt.Printf("no communication\n")
   }    
}

 

Go 語言循環語句

在不少實際問題中有許多具有規律性的重復操作,因此在程序中就需要重復執行某些語句。

Go 語言提供了以下幾種類型循環處理語句:

  • for循環
  • 循環嵌套

循環控制語句可以控制循環體內語句的執行過程。

GO 語言支持以下幾種循環控制語句:

  • break           用於中斷當前 for 循環或跳出 switch 語句

  • continue      跳過當前循環的剩余語句,然后繼續進行下一輪循環。

  • goto            將控制轉移到被標記的語句。

一、無限循環

如過循環中條件語句永遠不為 false 則會進行無限循環,我們可以通過 for 循環語句中只設置一個條件表達式來執行無限循環:

package main
 
import "fmt"
 
func main() {
    for true  {
        fmt.Printf("這是無限循環。\n");
    }
}

二、for循環

for循環是一個循環控制結構,可以執行指定次數的循環。

1、語法

Go語言的For循環油3中形式,只有其中的一種使用分號。

和 C 語言的 for 一樣:

for init; condition; post { }
  • init: 一般為賦值表達式,給控制變量賦初值;

  • condition: 關系表達式或邏輯表達式,循環控制條件;

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

和 C 的 while 一樣:

for condition { }

和 C 的 for(;;) 一樣:

for { }

for語句執行過程如下:

  • ①先對表達式1賦初值;

  • ②判別賦值表達式 init 是否滿足給定條件,若其值為真,滿足循環條件,則執行循環體內語句,然后執行 post,進入第二次循環,再判別 condition;否則判斷 condition 的值為假,不滿足條件,就終止for循環,執行循環體外語句。

2、實例

package main
 
import "fmt"
 
func main() {
 
   var b int = 15
   var a int
 
   numbers := [6]int{1, 2, 3, 5} 
 
   /* for 循環 */
   for a := 0; a < 10; a++ {
      fmt.Printf("a 的值為: %d\n", a)
   }
 
   for a < b {
      a++
      fmt.Printf("a 的值為: %d\n", a)
      }
 
   for i,x:= range numbers {
      fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
   }   
}

三、嵌套循環

Go 語言允許用戶在循環內使用循環。接下來我們將為大家介紹嵌套循環的使用。

1、語法

以下為 Go 語言嵌套循環的格式:

for [condition |  ( init; condition; increment ) | Range]
{
   for [condition |  ( init; condition; increment ) | Range]
   {
      statement(s);
   }
   statement(s);
}

2、實例

以下實例使用循環嵌套來輸出 2 到 100 間的素數:

package main
 
import "fmt"
 
func main() {
   /* 定義局部變量 */
   var i, j int
 
   for i=2; i < 100; i++ {
      for j=2; j <= (i/j); j++ {
         if(i%j==0) {
            break; // 如果發現因子,則不是素數
         }
      }
      if(j > (i/j)) {
         fmt.Printf("%d  是素數\n", i);
      }
   }  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM