xia的小窩

一起來coding和碼字吧

0%

Golang-條件判斷與迴圈

條件判斷

if

我們可以使用簡單的 if 敘述

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
)

func main() {
x := 0
if x == 0 {
fmt.Println("x == 0")
}
}

else

或者在添加一個輔助判斷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
)

func main() {
x := 0
if x == 0 {
fmt.Println("x == 0")
}
else{
fmt.Println("x != 0")
}
}

else if

我們也能使用三個判斷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
)

func main() {
x := 0
if x == 0 {
fmt.Println("x == 0")
}
else if x == 1{
fmt.Println("x != 0")
}
else{
fmt.Println("x >= 0")
}
}

if 敘述的起始賦值

為了防止多佔一份記憶體空間,我們可以在 if 敘述中加上所謂的 起始賦值敘述

1
2
3
if <起始賦值敘述> ; <布林運算式>{
程式區塊
}

我們來直接看看範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
"errors"
"fmt"
)

func chose(x int) error {
if x < 0 {
return errors.New(" !< 0")
} else {
return nil
}
}

func main() {
x := 3
if err := chose(x); err != nil {
fmt.Println(err)
} else if x%3 == 0 {
fmt.Println("整除 3")
} else {
fmt.Println("none")
}
}

我們可以先不看 error 的部分,這邊我們使用了如果 error 不為 nil 的時候,沒有發現錯誤的情況下,才會繼續處理 else if 的部分。

使用 switch

我們可以從單純的 if / else 去看這個新函式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"time"
)

func main() {
keep := time.Friday
switch keep {
case time.Friday:
fmt.Println("5")
/*fallthrough*/
case time.Monday:
fmt.Println("1")
default:
fmt.Println("none")
}
}

一樣是由上到下,但是如果你想將所有符合的 case 都執行的話,在下方可以加上 fallthrough 這個關鍵字,所以說使用 switch 能比單純的 if/else 更加好使。

迴圈

golang 只支援 for 迴圈,但是它非常有彈性。我們可以直接看看例子。

1
2
3
4
for{
fmt.Println(x)
/*break*/
}

比如正上方的用法就會形成一種無限迴圈,所以需要給它添加條件以及 break

正常來說,一般的用法會是這樣

1
2
3
for i := 0; i < 5; i++ {
fmt.Println(x);
}

再來,我們來看看 map 或是 陣列的走訪

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
)

func main() {
x := []string{"0", "1", "2"}
for i := 0; i < len(x); i++ {
fmt.Println(x[i])
}
}

至於 map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import (
"fmt"
)

func main() {
config := map[string]string{
"0": "3",
"1": "4",
"2": "5",
}
for key, val := range config {
fmt.Println(key, " = ", val)
}
}

或者我們也可以使用 _ 來代替 keyval …..,就單看你想要取出來麼來使用……

break and continue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import (
"fmt"
)

func main() {
x := 55
for {
if x%5 == 0 {
fmt.Println("略")
x -= 1
continue
}
if x > 0 {
x -= 1
break
}
}
fmt.Println(x)
}

continue 會中只當下這個迴圈,並進入新一輪迴圈。但是變數遞增或事遞減都會繼續執行

break 則是中斷此迴圈