iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Modern Web

Go,一起成為全端吧!—— 給前端工程師的 Golang 後端學習筆記系列 第 19

Day19 - Go 與資料庫:用 GORM 操作 SQLite

  • 分享至 

  • xImage
  •  

了解 SQLite 和 GORM 的基本操作之後,就要把它們應用在 To-do List 的專案中了!
今天會從安裝環境開始,之後建立資料表等,摘要如下:

  1. SQLite 與 GORM 的環境建立
  2. 建立資料表
  3. 資料庫連線
  4. 用 DB Browser for SQLite 查看資料表

那我們就開始吧!


1. SQLite 與 GORM 的環境建立

首先,要先安裝這兩個套件,要記得把路徑轉到與 go.mod 同一層,輸入以下指令才能順利安裝唷!

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

輸出:
https://ithelp.ithome.com.tw/upload/images/20251003/20178223nwnZZMJQM5.png
https://ithelp.ithome.com.tw/upload/images/20251003/20178223V9di69ny00.png

完成安裝之後,你就會在 go.mod 檔案裡面看見已經新增了這兩個套件。這樣就成功了!


2. 建立資料表

再來就是要建立資料表!原本我們在 model/task.go 中,有建立一個叫做 Task 的資料結構對吧,現在我們要把改變成可以與資料庫資料連結~
需要 import "gorm.io/gorm" 這個套件,然後更改 Task struct 裡面 ID 的欄位,改成直接抓取資料庫裡面自動生成的編號:

package model
import(
	"gorm.io/gorm"
)

type Task struct {
	gorm.Model   	// 將 ID 改為抓取資料庫內建
	Item   string `json:"item"`
	Status bool   `json:"status"`
}

type UpdateTask struct {
	Item  *string `json:"item"`
	Status *bool   `json:"status"`
}

📌  gorm.Model 預設新增四個欄位:

  • ID uint :每一筆資料都會有一組自己的。
  • CreatedAt time.Time :資料建立時間。
  • UpdatedAt time.Time :資料被修改時間。
  • DeletedAt gorm.DeletedAt :刪除標記。

DeletedAt gorm.DeletedAt 這個比較特別,它的意思是「 如果要刪除一筆資料,GORM 不會真的把資料從資料庫移除,而是把 DeletedAt 設成某個時間點 」。所以在我們查詢資料表時,GORM 就會自動忽略那些有被標記過的資料(DeletedAt != NULL)。

👉 這樣子的做法是可以避免誤刪除資料,可以復原或是追蹤。


3. 資料庫連線

資料庫的連線要寫在 main.go 裡,與之前啟動 server、設置 router 路徑的位置一樣,不過資料庫連線需要放在最前面,連線之後,再建立資料表~(*一定是先連線 —> 再建表 )。

package main
import (
	"app/apiHandler"
	"app/middleware"
	"app/model"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"fmt"
	"log"
)

func main() {
	// 連線 SQLite 資料庫
	db, err := gorm.Open(sqlite.Open("tasks.db"), &gorm.Config{})
	if err != nil {
		log.Fatal("failed to connect database")
	}

	// 自動建立資料表
	err = db.AutoMigrate(&model.Task{})
	if err != nil {
		log.Fatal("failed to migrate")
	}
	
	fmt.Println("資料庫初始化完成!")

	r := gin.Default()
	// r.Use(middleware.ErrorHandler())
	// r.GET("/tasks", apiHandler.GetTasks)
	// r.POST("/tasks", apiHandler.AddTask)
	// r.PATCH("/tasks/:id", apiHandler.UpdateTask)
	// r.DELETE("/tasks/:id", apiHandler.DeleteTask)
	r.Run(":8080")
}

但為了看出差別,我們可以先加入一筆資料,這樣等一下開資料庫就可以看到新增的資料~
所以在資料庫初始化之後與開啟 server 之前,新增一筆資料到資料庫中:

fmt.Println("資料庫初始化完成!")

// 新增一筆資料
task := model.Task{Item: "鐵人賽文章", Status: false}
db.Create(&task)

r := gin.Default()

接著,啟動專案之後,就會看到以下輸出:
https://ithelp.ithome.com.tw/upload/images/20251003/20178223SSaK8KXsK4.png

而且根目錄會多一個 tasks.db 的檔案,看到有這個檔案,就表示成功了!


4. 用 DB Browser for SQLite 查看資料表

最後,我們要用 DB Browser for SQLite 來看一下剛剛的 tasks.db 裡面有沒有我們新增的測試資料~請大家先依照自己的設備下載對應的版本:https://sqlitebrowser.org/ ,完成下載之後,就可以開啟軟體!
接下來要匯入 tasks.db 資料庫:

點擊 Open Database → 找到 tasks.db 檔案 → Open

就會看到,tasks 資料庫成功開啟了!可以從資料庫中看到,我們剛剛在 model/task.go 檔案裡面設定的參數都有順利被建立。
https://ithelp.ithome.com.tw/upload/images/20251003/20178223jh0t5v5ePe.png

再來,要來看一下剛才新增的測試資料有沒有成功輸入!
點擊 Browse Data → 在左上的 Table 選單,選擇 tasks 資料表
就會開看到內容了!!!是不是很有成就感~🎉🎉🎉
https://ithelp.ithome.com.tw/upload/images/20251003/201782234eMROi1qsB.png


好的!以上就完成了資料庫的連線~明天我們會將 CRUD 的動作與資料庫做連動!


上一篇
Day18 - Go 與資料庫:GORM
下一篇
Day20 - GORM CRUD:To-do List 連結資料庫
系列文
Go,一起成為全端吧!—— 給前端工程師的 Golang 後端學習筆記24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言