Go Programming – GORM: คู่มือฉบับสมบูรณ์สำหรับนักพัฒนา

Go Programming – GORM

GORM (Go Object-Relational Mapping) เป็นไลบรารี ORM ที่ทรงพลังและใช้งานง่ายสำหรับภาษา Go ซึ่งช่วยให้นักพัฒนาสามารถทำงานกับฐานข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น GORM ช่วยลดความซับซ้อนในการเขียนคำสั่ง SQL โดยตรง ทำให้โค้ดอ่านง่ายขึ้นและบำรุงรักษาง่ายขึ้น บทความนี้จะแนะนำคุณตลอดกระบวนการใช้ GORM ตั้งแต่การติดตั้งเบื้องต้นไปจนถึงการใช้งานฟังก์ชันขั้นสูง เช่น การสร้างความสัมพันธ์ระหว่างตาราง (Association) และการดึงข้อมูลล่วงหน้า (Preloading) ด้วย GORM คุณจะสามารถจัดการฐานข้อมูลได้อย่างมีประสิทธิภาพและรวดเร็ว

การติดตั้ง GORM

การเริ่มต้นใช้งาน GORM นั้นง่ายมาก คุณสามารถติดตั้ง GORM และไดรเวอร์ฐานข้อมูลที่คุณต้องการได้โดยใช้คำสั่ง `go get`

การ Get Package GORM

เริ่มต้นด้วยการติดตั้ง GORM โดยใช้คำสั่ง `go get gorm.io/gorm` ใน Terminal ของคุณ

การ Copy Driver

หลังจากติดตั้ง GORM แล้ว คุณจะต้องติดตั้งไดรเวอร์ฐานข้อมูลที่คุณต้องการใช้งาน เช่น MySQL, PostgreSQL, SQLite หรืออื่น ๆ ในตัวอย่างนี้ เราจะใช้ MySQL

การติดตั้ง Driver MySQL

ติดตั้งไดรเวอร์ MySQL โดยใช้คำสั่ง `go get gorm.io/driver/mysql`

การเชื่อมต่อฐานข้อมูล

หลังจากติดตั้ง GORM และไดรเวอร์แล้ว ขั้นตอนต่อไปคือการเชื่อมต่อกับฐานข้อมูลของคุณ

การใช้คำสั่ง Open

GORM ใช้คำสั่ง `Open` เพื่อเชื่อมต่อกับฐานข้อมูล คุณจะต้องระบุไดรเวอร์ฐานข้อมูลและข้อมูลการเชื่อมต่อ เช่น ชื่อผู้ใช้ รหัสผ่าน โฮสต์ และชื่อฐานข้อมูล

การใช้ Driver SQL

ไดรเวอร์ SQL จะช่วยให้คุณสามารถเชื่อมต่อกับฐานข้อมูลได้

การสร้าง Database

ก่อนที่คุณจะเชื่อมต่อกับฐานข้อมูล คุณจะต้องมีฐานข้อมูลที่คุณจะใช้ คุณสามารถสร้างฐานข้อมูลได้โดยใช้เครื่องมือจัดการฐานข้อมูล เช่น phpMyAdmin หรือคำสั่ง SQL

การติดตั้ง Extension

คุณอาจต้องติดตั้งส่วนขยายเพิ่มเติมสำหรับฐานข้อมูลของคุณ เช่น ส่วนขยายสำหรับจัดการเวลา (timestamp) ใน MySQL

การ Connect Database

หลังจากติดตั้งไดรเวอร์และมีฐานข้อมูลแล้ว คุณสามารถใช้คำสั่ง `Open` เพื่อเชื่อมต่อกับฐานข้อมูลได้

“`go
import (
“gorm.io/driver/mysql”
“gorm.io/gorm”
)

func main() {
dsn := “user:password@tcp(localhost:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local”
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(“failed to connect database”)
}
// …
}
“`

การสร้าง Model และ Migrate

GORM ใช้ Model เพื่อแมปกับตารางในฐานข้อมูล Model คือ struct ที่กำหนดโครงสร้างของข้อมูลที่คุณต้องการจัดเก็บในฐานข้อมูล

การสร้าง Table

คุณสามารถสร้างตารางในฐานข้อมูลโดยใช้ Model ของ GORM

การใช้ Migrate

GORM มีฟังก์ชัน `Migrate` ที่ช่วยให้คุณสร้างและจัดการตารางในฐานข้อมูลโดยอัตโนมัติ

การใช้ Auto Migrate

ฟังก์ชัน `AutoMigrate` จะสร้างตารางให้คุณโดยอัตโนมัติตาม Model ที่คุณกำหนด

“`go
type Gender struct {
ID uint `gorm:”primaryKey”`
Name string
}

func main() {
// … (การเชื่อมต่อฐานข้อมูล)
db.AutoMigrate(&Gender{})
}
“`

การใช้ Create Table

คุณสามารถใช้คำสั่ง `Create Table` เพื่อสร้างตาราง

การใช้ Convention

GORM ใช้ Convention เพื่อลดการ Config เช่น ชื่อตารางจะถูกตั้งค่าตามชื่อ struct ในรูปแบบ pluralized snake_case

การใช้ Snake Case

GORM จะแปลงชื่อ field ใน struct เป็น snake_case ในตารางฐานข้อมูล

การใช้ SQL Logger

GORM มี SQL Logger ที่ช่วยให้คุณดูคำสั่ง SQL ที่ GORM สร้างขึ้นได้ ซึ่งเป็นประโยชน์สำหรับการแก้ไขปัญหาและทำความเข้าใจการทำงานของ GORM

การใช้ Interface

GORM ใช้ Interface เพื่อให้คุณสามารถขยายและปรับแต่งการทำงานของ GORM ได้

การ Config

คุณสามารถ Config GORM เพื่อปรับแต่งการทำงานของ GORM เช่น การตั้งค่า Logger, การตั้งค่าการเชื่อมต่อ และอื่น ๆ

การใช้ Column

คุณสามารถใช้ tag `gorm:”column:column_name”` เพื่อกำหนดชื่อคอลัมน์ในตาราง

การใช้ Primary Key

คุณสามารถใช้ tag `gorm:”primaryKey”` เพื่อกำหนดคอลัมน์เป็น primary key

การใช้ Index

คุณสามารถใช้ tag `gorm:”index”` เพื่อสร้าง index สำหรับคอลัมน์

การใช้ Comment

คุณสามารถใช้ tag `gorm:”comment:comment”` เพื่อเพิ่ม comment ให้กับคอลัมน์

การใช้ Table Name

คุณสามารถใช้ tag `gorm:”table:table_name”` เพื่อกำหนดชื่อตาราง

การใช้ Model

Model คือ struct ที่แสดงถึงตารางในฐานข้อมูล

การ CRUD (Create, Read, Update, Delete)

GORM มีฟังก์ชัน CRUD (Create, Read, Update, Delete) ที่ช่วยให้คุณสามารถจัดการข้อมูลในฐานข้อมูลได้อย่างง่ายดาย

การใช้ Create

ใช้ `Create` เพื่อสร้าง record ใหม่ในฐานข้อมูล

“`go
func main() {
// … (การเชื่อมต่อฐานข้อมูล)
db.Create(&Gender{Name: “Male”})
}
“`

การใช้ First

ใช้ `First` เพื่อดึง record แรกที่ตรงกับเงื่อนไข

“`go
var gender Gender
db.First(&gender, 1) // find product with integer primary key
“`

การใช้ Take

ใช้ `Take` เพื่อดึง record แรกโดยไม่สนใจเงื่อนไข

“`go
var gender Gender
db.Take(&gender)
“`

การใช้ Last

ใช้ `Last` เพื่อดึง record สุดท้ายที่ตรงกับเงื่อนไข

“`go
var gender Gender
db.Last(&gender)
“`

การใช้ File

ไม่มีฟังก์ชัน File ใน GORM

การใช้ Where

ใช้ `Where` เพื่อกรองข้อมูลตามเงื่อนไข

“`go
var genders []Gender
db.Where(“name = ?”, “Male”).Find(&genders)
“`

การใช้ Order

ใช้ `Order` เพื่อเรียงลำดับข้อมูล

“`go
var genders []Gender
db.Order(“name desc”).Find(&genders)
“`

การใช้ Limit

ใช้ `Limit` เพื่อจำกัดจำนวน record ที่ดึง

“`go
var genders []Gender
db.Limit(10).Find(&genders)
“`

การใช้ Get Gender

ใช้ฟังก์ชันต่างๆ เช่น `First`, `Find` เพื่อดึงข้อมูล Gender

การใช้ Get Gender By ID

ใช้ `First` และระบุ ID เพื่อดึงข้อมูล Gender ตาม ID

“`go
var gender Gender
db.First(&gender, 1)
“`

การใช้ Get Gender By Name

ใช้ `Where` เพื่อกรองข้อมูลตามชื่อ Gender

“`go
var genders []Gender
db.Where(“name = ?”, “Male”).Find(&genders)
“`

การใช้ Update

ใช้ `Update` เพื่ออัปเดตข้อมูล

“`go
db.Model(&gender).Update(“name”, “Female”)
“`

การใช้ Update Single Column

ใช้ `Update` เพื่ออัปเดตคอลัมน์เดียว

“`go
db.Model(&gender).Update(“name”, “Female”)
“`

การใช้ Update Multiple Columns

ใช้ `Update` เพื่ออัปเดตหลายคอลัมน์พร้อมกัน

“`go
db.Model(&gender).Updates(Gender{Name: “Female”})
“`

การใช้ Delete

ใช้ `Delete` เพื่อลบข้อมูล

“`go
db.Delete(&gender)
“`

การใช้ Soft Delete

GORM รองรับ Soft Delete ซึ่งจะตั้งค่าคอลัมน์ `deleted_at` แทนการลบข้อมูลจริง

“`go
type Gender struct {
ID uint `gorm:”primaryKey”`
Name string
gorm.DeletedAt
}
“`

การใช้ Permanent Delete

คุณสามารถลบข้อมูลอย่างถาวรได้โดยใช้ `Unscoped().Delete()`

“`go
db.Unscoped().Delete(&gender)
“`

Association และ Preloading

GORM รองรับ Association ซึ่งช่วยให้คุณสามารถสร้างความสัมพันธ์ระหว่างตารางได้

การสร้าง Customer

ตัวอย่างการสร้าง Model Customer และความสัมพันธ์กับ Gender

“`go
type Customer struct {
ID uint `gorm:”primaryKey”`
Name string
GenderID uint
Gender Gender
}
“`

การใช้ Association

คุณสามารถใช้ Association เพื่อเชื่อมโยงข้อมูลจากตารางที่เกี่ยวข้อง

“`go
var customer Customer
db.Preload(“Gender”).First(&customer)
“`

การใช้ Preloading

Preloading ช่วยให้คุณดึงข้อมูลที่เกี่ยวข้อง (เช่น Gender) พร้อมกันกับข้อมูลหลัก (เช่น Customer) ซึ่งช่วยลดจำนวน query ที่ต้องเรียกใช้


💬 ปรึกษาการเงินฟรีกับผู้เชี่ยวชาญ คลิกเพื่อแอดไลน์


👉 แอดไลน์เพื่อปรึกษาฟรี


หรือสแกน QR เพื่อแอด

QR Code Line