Go 語言系列(八):資料庫整合
這是 Go 語言從零到 Web 應用系列的第八篇。上一篇我們建立了結構清晰的專案,但資料存在記憶體中。這篇要把資料存進真正的資料庫。 為什麼選 SQLite? 對於教學和小型應用來說,SQLite 是完美的選擇: 零配置:不需要安裝資料庫伺服器 單一檔案:整個資料庫就是一個檔案 效能優秀:對於大多數應用場景都足夠快 SQL 相容:學到的 SQL 知識可以直接用在 PostgreSQL、MySQL 而且 Go 的 database/sql 是統一的資料庫介面,只要換一個 driver 就能切換到其他資料庫。 database/sql 介紹 database/sql 是 Go 標準庫提供的資料庫抽象層。它定義了統一的介面,不同的資料庫只需要提供對應的 driver。 常見的 driver: SQLite: github.com/mattn/go-sqlite3(CGO)或 modernc.org/sqlite(純 Go) PostgreSQL: github.com/lib/pq 或 github.com/jackc/pgx MySQL: github.com/go-sql-driver/mysql 我們使用純 Go 實作的 SQLite driver,不需要 CGO: go get modernc.org/sqlite 連接資料庫 import ( "database/sql" _ "modernc.org/sqlite" // 註冊 SQLite driver ) func main() { db, err := sql.Open("sqlite", "./bookapi.db") if err != nil { log.Fatal(err) } defer db.Close() // 驗證連線 if err := db.Ping(); err != nil { log.Fatal(err) } fmt.Println("Database connected!") } 注意 _ "modernc.org/sqlite" 這行——前綴的 _ 表示只引入套件的副作用(註冊 driver),不直接使用它的任何匯出名稱。 ...