go語言的if 、if else
與C語言相似,除了不需要括號()
Go 語言 switch 語句
switch 語句用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上至下逐一測試,直到匹配爲止。
switch 語句執行的過程從上至下,直到找到匹配項,匹配項後面也不需要再加 break。
switch 默認情況下 case 最後自帶 break 語句,匹配成功後就不會執行其他 case,如果我們需要執行後面的 case,可以使用 fallthrough
- 語法
Go 編程語言中 switch 語句的語法如下:
switch var1 {
case val1:
…
case val2:
…
default:
…
}
變量 var1 可以是任何類型,而 val1 和 val2 則可以是同類型的任意值。類型不被侷限於常量或整數,但必須是相同的類型;或者最終結果爲相同類型的表達式。
您可以同時測試多個可能符合條件的值,使用逗號分割它們,例如:case val1, val2, val3。
流程圖:
- fallthrough
使用 fallthrough 會強制執行後面的 case 語句,fallthrough 不會判斷下一條 case 的表達式結果是否爲 true。
switch 從第一個判斷表達式爲 true 的 case 開始執行,如果 case 帶有 fallthrough,程序會繼續執行下一條 case,且它不會去判斷下一個 case 的表達式是否爲 true。
package main
import "fmt"
func main() {
switch {
case false:
fmt.Println("1、case 條件語句爲 false")
fallthrough
case true:
fmt.Println("2、case 條件語句爲 true")
fallthrough
case false:
fmt.Println("3、case 條件語句爲 false")
fallthrough
case true:
fmt.Println("4、case 條件語句爲 true")
case false:
fmt.Println("5、case 條件語句爲 false")
fallthrough
default:
fmt.Println("6、默認 case")
}
}
2、case 條件語句爲 true
3、case 條件語句爲 false
4、case 條件語句爲 true
Process finished with exit code 0
Go 語言 select 語句
select 是 Go 中的一個控制結構,類似於用於通信的 switch 語句。每個 case 必須是一個通信操作,要麼是發送要麼是接收。
select 隨機執行一個可運行的 case。如果沒有 case 可運行,它將阻塞,直到有 case 可運行。一個默認的子句應該總是可運行的
Go 編程語言中 select 語句的語法如下:
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定義任意數量的 case /
default : / 可選 */
statement(s);
}
以下描述了 select 語句的語法:
- 每個 case 都必須是一個通信
所有 channel 表達式都會被求值
所有被髮送的表達式都會被求值
如果任意某個通信可以進行,它就執行,其他被忽略。
如果有多個 case 都可以運行,Select 會隨機公平地選出一個執行。其他不會執行。
否則:
如果有 default 子句,則執行該語句。
如果沒有 default 子句,select 將阻塞,直到某個通信可以運行;Go 不會重新對 channel 或值進行求值
package main
import (
"fmt"
"time"
)
func Chann(ch chan int, stopCh chan bool) {
var i int
i = 10
for j := 0; j < 10; j++ {
ch <- i
time.Sleep(time.Second)
}
stopCh <- true
}
func TestFuncyunsuanfuSelect1(){
ch := make(chan int)
c := 0
stopCh := make(chan bool)
go Chann(ch, stopCh)
for {
select {
case c = <-ch:
fmt.Println("Recvice", c)
fmt.Println("channel")
case s := <-ch:
fmt.Println("Receive", s)
case _ = <-stopCh:
goto end
}
}
end:
}
func TestFuncyunsuanfuSelect() {
var c1, c2, c3 chan int //一個可以發送 int 類型數據的 channel 一般寫爲 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")
}
}
func main(){
TestFuncyunsuanfuSelect1()
TestFuncyunsuanfuSelect()
}
Recvice 10
channel
Receive 10
Recvice 10
channel
Receive 10
Recvice 10
channel
Receive 10
Receive 10
Receive 10
Receive 10
Recvice 10
channel
no communication
Process finished with exit code 0
GO語言的循環語句
Go 語言的 For 循環有 3 種形式,只有其中的一種使用分號。
和 C 語言的 for 一樣:
for init; condition; post { } —》 和 C 的 for(i=0;i<condition;i++) 一樣:
for condition { } —》 C中的while()
for { } ----》 C中的for(;😉
init: 一般爲賦值表達式,給控制變量賦初值;
condition: 關係表達式或邏輯表達式,循環控制條件;
post: 一般爲賦值表達式,給控制變量增量或減量。
for語句執行過程如下:
1、先對錶達式 賦初值;
2、判別賦值表達式 init 是否滿足給定條件,若其值爲真,滿足循環條件,則執行循環體內語句,然後執行 post,進入第二次循環,再判別 condition;否則判斷 condition 的值爲假,不滿足條件,就終止for循環,執行循環體外語句。
for 循環的 range 格式可以對 slice、map、數組、字符串等進行迭代循環。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
func TestFunckongzhiyuju(){
/*第一種類似C中的for(i=0;i<20;i++)*/
/*
var sum int = 0
var i int = 0
for i = 0; i <= 10; i++ {
sum += i
}
*/
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
/*第二種類似於C中的while()*/
sum = 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
// 這樣寫也可以,更像 While 語句形式
for sum <= 10{
sum += sum
}
fmt.Println(sum)
/*第三種類似於C中的for()*/
m := 0
for {
m++ // 無限循環下去
}
/*分片處理*/
strings := []string{"google", "runoob"}
for i, s := range strings {
fmt.Println(i, s)
}
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
}
func main(){
//TestFuncyunsuanfuSelect1()
//TestFuncyunsuanfuSelect()
TestFunckongzhiyuju()
}
55
16
16
0 google
1 runoob
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
Process finished with exit code 0