Like Share Discussion Bookmark Smile

J.J. Huang   2025-04-29   Getting Started Golang 07.套件   瀏覽次數:次   DMCA.com Protection Status

Go | 標準函式庫套件的使用

💬 簡介

Go 語言內建一套功能豐富的標準函式庫(Standard Library),涵蓋了格式化輸出、字串處理、時間操作、檔案管理、網路請求等功能,無需額外安裝即可使用。這些套件設計簡潔且高效,是 Go 開發的核心工具。

本文將介紹幾個常用的標準函式庫套件,包括 fmtstringstimemathosnet/http,並通過簡單範例展示它們的實際應用,幫助您快速上手!

圖片來源:Gophers


🔍 標準函式庫套件概覽

Go 的標準函式庫包含數十個套件,每個套件專注於特定功能,命名簡潔且直觀。以下是一些常用的套件及其用途:

  • fmt:格式化輸入與輸出,例如列印文字或格式化字串。
  • strings:字串操作,例如大小寫轉換、分割與拼接。
  • time:時間與日期處理,例如獲取當前時間或格式化時間戳。
  • math:數學運算,例如三角函式、取整與隨機數生成。
  • os:作業系統相關操作,例如檔案讀寫與環境變數管理。
  • net/http:HTTP 伺服器與客戶端功能,例如建立網頁伺服器或發送網路請求。

📝 標準函式庫的套件位於 Go 安裝目錄的 src 資料夾中,無需額外下載,隨 Go 環境即可使用。


📦 常用套件的使用方式

讓我們通過簡單範例,展示幾個常用套件的功能與基本用法。這些範例將幫助您理解如何將套件應用於實際場景。

🖨 fmt:格式化與輸出

fmt 套件是 Go 程式中最常用的套件之一,提供格式化輸出(PrintlnPrintf)與輸入(Scan)功能。

  • 範例:格式化輸出問候訊息
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package main

    import "fmt"

    func main() {
    name := "Gopher"
    age := 10
    fmt.Printf("Hello, %s! You are %d years old.\n", name, age)
    }
    輸出:
    1
    Hello, Gopher! You are 10 years old.

    📝 fmt.Printf 使用佔位符(如 %s 表示字串,%d 表示整數)格式化輸出,簡單且靈活。


🔤 strings:字串操作

strings 套件提供豐富的字串處理函式,例如大小寫轉換、分割、取代等,適用於文本處理場景。

  • 範例:將問候訊息轉為大寫並分割
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package main

    import (
    "fmt"
    "strings"
    )

    func main() {
    message := "Hello, Gopher!"
    upper := strings.ToUpper(message)
    words := strings.Split(message, " ")
    fmt.Println("Uppercase:", upper)
    fmt.Println("Words:", words)
    }
    輸出:
    1
    2
    Uppercase: HELLO, GOPHER!
    Words: [Hello, Gopher!]

    📝 strings.ToUpper 將字串轉為大寫,strings.Split 按指定分隔符分割字串,這些函式在文本處理中非常實用。


⏰ time:時間與日期

time 套件用於處理時間與日期,例如獲取當前時間、格式化時間戳或計算時間間隔。

  • 範例:顯示當前時間戳
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package main

    import (
    "fmt"
    "time"
    )

    func main() {
    now := time.Now()
    formatted := now.Format("2006-01-02 15:04:05")
    fmt.Println("Current Time:", formatted)
    }
    輸出:
    1
    Current Time: 2025-04-29 09:00:00

    📝 time.Now 獲取當前時間,Format 使用特定格式(Go 使用 2006-01-02 15:04:05 作為參考模板)輸出時間戳。


➕ math:數學運算

math 套件提供基本的數學函式,例如平方根、絕對值與三角函式,適合科學計算或數值處理。

  • 範例:計算平方根與取整
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package main

    import (
    "fmt"
    "math"
    )

    func main() {
    num := 16.0
    sqrt := math.Sqrt(num)
    floor := math.Floor(num / 3.0)
    fmt.Println("Square Root:", sqrt)
    fmt.Println("Floor:", floor)
    }
    輸出:
    1
    2
    Square Root: 4
    Floor: 5

    📝 math.Sqrt 計算平方根,math.Floor 將數字向下取整,這些函式簡單且高效。


📂 os:作業系統操作

os 套件提供與作業系統交互的功能,例如檔案操作、環境變數或程式退出。

  • 範例:讀取環境變數與建立檔案
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package main

    import (
    "fmt"
    "os"
    )

    func main() {
    home := os.Getenv("HOME")
    fmt.Println("Home Directory:", home)

    file, err := os.Create("example.txt")
    if err != nil {
    fmt.Println("Error:", err)
    return
    }
    defer file.Close()
    fmt.Println("File created: example.txt")
    }
    輸出:
    1
    2
    Home Directory: /home/user
    File created: example.txt

    📝 os.Getenv 讀取環境變數,os.Create 建立檔案。注意,HOME 的實際值因系統而異。


🌐 net/http:網路請求與伺服器

net/http 套件用於建立 HTTP 伺服器或發送網路請求,是構建網頁應用或 API 的基礎工具。

  • 範例:建立簡單網頁伺服器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package main

    import (
    "fmt"
    "net/http"
    )

    func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, Gopher!")
    })
    fmt.Println("Server starting at :8080...")
    if err := http.ListenAndServe(":8080", nil); err != nil {
    fmt.Println("Error:", err)
    }
    }
    輸出:
    1
    Server starting at :8080...
    瀏覽器訪問:開啟瀏覽器,輸入 http://localhost:8080,將顯示:
    1
    Hello, Gopher!

    📝 http.HandleFunc 定義路由處理函式,http.ListenAndServe 啟動伺服器。此範例展示如何用 net/http 快速建立一個簡單的網頁伺服器。


🛠 應用:結合多套件實現日誌伺服器

為了展示套件間的協作,我們結合 fmtstringstimeosnet/http 套件,實現一個簡單的日誌伺服器,將 HTTP 請求的訊息記錄到檔案。

  • 範例:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package main

    import (
    "fmt"
    "net/http"
    "os"
    "strings"
    "time"
    )

    func main() {
    file, err := os.Create("server_log.txt")
    if err != nil {
    fmt.Println("Error:", err)
    return
    }
    defer file.Close()

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    message := fmt.Sprintf("Request from %s", r.RemoteAddr)
    upperMessage := strings.ToUpper(message)
    timestamp := time.Now().Format("2006-01-02 15:04:05")
    logEntry := fmt.Sprintf("[%s] %s\n", timestamp, upperMessage)

    _, err := file.WriteString(logEntry)
    if err != nil {
    fmt.Println("Error:", err)
    }
    fmt.Fprint(w, "Hello, Gopher! Request logged.")
    })

    fmt.Println("Server starting at :8080...")
    if err := http.ListenAndServe(":8080", nil); err != nil {
    fmt.Println("Error:", err)
    }
    }
    輸出:
    1
    Server starting at :8080...
    瀏覽器訪問:開啟瀏覽器,輸入 http://localhost:8080,將顯示:
    1
    Hello, Gopher! Request logged.
    檔案內容(server_log.txt):
    1
    [2025-04-29 09:00:00] REQUEST FROM 127.0.0.1:12345

📝 這個範例使用 net/http 處理 HTTP 請求,time 生成時間戳,strings 轉換大寫,fmt 格式化訊息,os 寫入檔案,展示了標準函式庫套件的協作能力。


🎯 總結

Go 的標準函式庫以小而美、簡單實用著稱
無論是格式化輸出 (fmt)、數學計算 (math)、時間操作 (time),還是建立 HTTP 伺服器 (net/http),
每個套件都各司其職,讓開發者可以專注在業務邏輯上,不必重複造輪子。

熟練這些標準套件的使用,是學好語言的重要一步,也是開啟更進階開發(如併發控制、網路程式設計等)的大門!

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go