> For the complete documentation index, see [llms.txt](https://go.netdpi.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://go.netdpi.net/control/05.02-if.md).

# 05.02-If

讓我們來修改之前寫的程式，改為在每行印出數字 1 到 10，並指出該數字是奇數（odd）或偶數（even），像是這樣：

```go
1 odd
2 even
3 odd
4 even
5 odd
6 even
7 odd
8 even
9 odd
10 even
```

首先，我們需要一種方法來定義數字是奇數還是偶數，一個簡單的方式是將這個數字除以 2，如果餘數是 0，則為偶數；否則就是奇數。因此我們如何用 Go 找出除法的餘數呢？我們會用 `%` 運算符，`1 % 2` 等於 `1`、`2 % 2` 等於 `0`、 `3 % 2` 等於 `1` 諸如此類。

接著我們需要一種方法，可以透過條件選擇不同的事物，我們可以用 `if` statement：

```go
if i % 2 == 0 {
  // even
} else {
  // odd
}
```

`if` statement 類似 `for` statement，裡頭會有一個條件判斷式，並接著一個程式區塊。If statements 也有一個選配的 `else`。如果條件判斷式為 `true`，那麼會執行條件判斷式後面的程式碼，否則會跳過該程式碼區塊。若有 `else` 的話，則會執行 else 後面的程式碼區塊。

If statements 也可以有 `else if`：

```go
if i % 2 == 0 {
    // divisible by 2
} else if i % 3 == 0 {
    // divisible by 3
} else if i % 4 == 0 {
    // divisible by 4
}
```

條件判斷式是由上而下進行檢查的，若第一個結果為真，則會執行相對應的程式碼區塊，而其它的區塊則都不會執行，即使那些區塊的條件判斷式也會成立。（比如：4 跟 2 都可以整除 8，但是 `// divisible by 4` 這個區塊絕對不會執行，原因是會先執行 `// divisible by 2`）

將這些串在一起，我們會得到：

```go
func main() {
    for i := 1; i <= 10; i++ {
       if i % 2 == 0 {
            fmt.Println(i, "even")
        } else {
            fmt.Println(i, "odd")
        }
    }
}
```

我們從新看一次這整個程式：

* 建立一個型別為 int 的變數 `i`，並給定一個值 `1`
* `i` 是否小於或等於 `10` 呢？是的：進入該程式碼區塊。
* `i` ÷ `2` 的餘數是否等於 `0` 呢？否：進入 `else` 程式碼區塊。
* 在 `i` 後面印出 `odd`
* 加上 `i` （在條件式之後的 statement）
* `i` 是否小於或等於 `10` 呢？是的：進入該程式區塊。
* `i` ÷ `2` 的餘數是否等於 `0` 呢？是的：進入 `if` 程式碼區塊。
* 在 `i` 後面印出 `even`
* …<br>

餘數運算符，國小畢業之後就很少看到了，結果在程式設計時真的很有幫助，你從 zebra striping tables 到 partitioning data sets 裡到處都可以看到它。
