Go | 標準函式庫套件的使用
💬 簡介
Go 語言內建一套功能豐富的標準函式庫(Standard Library),涵蓋了格式化輸出、字串處理、時間操作、檔案管理、網路請求等功能,無需額外安裝即可使用。這些套件設計簡潔且高效,是 Go 開發的核心工具。
本文將介紹幾個常用的標準函式庫套件,包括 fmt
、strings
、time
、math
、os
和 net/http
,並通過簡單範例展示它們的實際應用,幫助您快速上手!
圖片來源:Gophers
🔍 標準函式庫套件概覽
Go 的標準函式庫包含數十個套件,每個套件專注於特定功能,命名簡潔且直觀。以下是一些常用的套件及其用途:
- fmt:格式化輸入與輸出,例如列印文字或格式化字串。
- strings:字串操作,例如大小寫轉換、分割與拼接。
- time:時間與日期處理,例如獲取當前時間或格式化時間戳。
- math:數學運算,例如三角函式、取整與隨機數生成。
- os:作業系統相關操作,例如檔案讀寫與環境變數管理。
- net/http:HTTP 伺服器與客戶端功能,例如建立網頁伺服器或發送網路請求。
📝 標準函式庫的套件位於 Go 安裝目錄的
src
資料夾中,無需額外下載,隨 Go 環境即可使用。
📦 常用套件的使用方式
讓我們通過簡單範例,展示幾個常用套件的功能與基本用法。這些範例將幫助您理解如何將套件應用於實際場景。
🖨 fmt:格式化與輸出
fmt
套件是 Go 程式中最常用的套件之一,提供格式化輸出(Println
、Printf
)與輸入(Scan
)功能。
- 範例:格式化輸出問候訊息輸出:
1
2
3
4
5
6
7
8
9package 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
14package 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
2Uppercase: HELLO, GOPHER!
Words: [Hello, Gopher!]📝
strings.ToUpper
將字串轉為大寫,strings.Split
按指定分隔符分割字串,這些函式在文本處理中非常實用。
⏰ time:時間與日期
time
套件用於處理時間與日期,例如獲取當前時間、格式化時間戳或計算時間間隔。
- 範例:顯示當前時間戳輸出:
1
2
3
4
5
6
7
8
9
10
11
12package 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
14package 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
2Square 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
19package 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
2Home 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
16package 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)
}
}瀏覽器訪問:開啟瀏覽器,輸入 http://localhost:8080,將顯示:1
Server starting at :8080...
1
Hello, Gopher!
📝
http.HandleFunc
定義路由處理函式,http.ListenAndServe
啟動伺服器。此範例展示如何用net/http
快速建立一個簡單的網頁伺服器。
🛠 應用:結合多套件實現日誌伺服器
為了展示套件間的協作,我們結合 fmt
、strings
、time
、os
和 net/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
36package 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)
}
}瀏覽器訪問:開啟瀏覽器,輸入 http://localhost:8080,將顯示:1
Server starting at :8080...
檔案內容(server_log.txt):1
Hello, Gopher! Request logged.
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