04.條件語句

JJJhr發表於2024-07-06

if 語句

  • if 的條件裡可以賦值
  • if 的條件裡賦值的變數作用域就在這個 if 語句裡

使用 if 語句開啟 txt 檔案

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    const filename = "test.txt"
    //返回兩個值([]byte, error)檔案內容和出錯形式
    contents, err := ioutil.ReadFile(filename)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("%s\n", contents)
    }
}

執行結果:

若無此檔案會輸出:

open test1.txt: The system cannot find the file specified.

if 可以像 for 一樣寫

package main

import (
    "fmt"
    "os"
)

func main() {
    const filename = "test.txt"
    //返回兩個值([]byte, error)檔案內容和出錯形式
    if contents, err := os.ReadFile(filename); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(string(contents))
    }
}

ioutil.ReadFile 中的 ReadFile 函式被畫上了刪除線(通常是灰色或斜體),這通常意味著該函式或包在較新版本的 Go 語言中已經被標記為廢棄(deprecated)或者已經有更推薦的替代方式。

對於 ioutil.ReadFile 來說,確實,從 Go 1.16 版本開始,io/ioutil 包中的許多函式,包括 ReadFile,都被認為是過時的,並推薦使用 osio 包中的函式作為替代。具體來說,ioutil.ReadFile 的功能現在可以透過 os.ReadFile 直接實現,後者提供了相同的功能但屬於更現代的 API。

使用 os.ReadFile 而不是 ioutil.ReadFile 的好處包括:

  1. 一致性:os 包是處理檔案和目錄的標準方式,使用它可以使你的程式碼與 Go 語言的其他部分保持一致。

  2. 未來的相容性:雖然 ioutil.ReadFile 在當前版本的 Go 中仍然可用,但它在未來的版本中可能會被完全移除。使用 os.ReadFile 可以確保你的程式碼在未來版本的 Go 中仍然有效。

  3. 效能:在某些情況下,os.ReadFile 可能提供了更好的效能,因為它直接利用了 Go 的內部機制來最佳化檔案讀取操作。

switch

  • 會自動 break ,除非使用 fallthrough
  • switch 後可以沒有表示式,case裡面寫明即可
package main

import (
    "fmt"
)

func grade(score int) string {
    g := ""
    switch {
    case score < 0 || score > 100:
        panic(fmt.Sprintf("Wrong score: %d", score))
    case score < 60:
        g = "F"
    case score < 80:
        g = "C"
    case score < 90:
        g = "B"
    case score <= 100:
        g = "A"
    }
    return g
}
func main() {
    fmt.Println(
        grade(0),
        grade(50),
        grade(70),
        grade(80),
        grade(90),
        grade(100),
    )
}

相關文章