0Pricing
Go Academy · บทเรียน

โมเดลและ AutoMigrate

กำหนดและย้ายโครงสร้าง

โมเดลและ AutoMigrate เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

GORM คืออะไร

GORM เป็นตัวจัดการความสัมพันธ์ระหว่างวัตถุที่ได้รับความนิยมมากที่สุดสำหรับ Go โดยจับคู่โครงสร้าง Go กับตารางฐานข้อมูล เพื่อให้คุณทำงานกับวัตถุแทนคำสั่งฐานข้อมูลดิบ รองรับ PostgreSQL, MySQL, SQLite และอื่น ๆ

  • การจับคู่โครงสร้างกับตาราง
  • การย้ายโครงสร้างฐานข้อมูลอัตโนมัติ
  • ความสัมพันธ์และฮุก

การกำหนดแบบจำลอง

แบบจำลองคือโครงสร้าง Go แต่ละฟิลด์ที่ส่งออกจะกลายเป็นคอลัมน์ การฝัง gorm.Model จะเพิ่มฟิลด์ ID, CreatedAt, UpdatedAt และ DeletedAt

type User struct {
    gorm.Model
    Name  string
    Email string
    Age   int
}

แท็กของฟิลด์

แท็กของโครงสร้างใช้ปรับแต่งคอลัมน์ คุณสามารถกำหนดขนาด ความไม่ซ้ำ ดัชนี และค่าเริ่มต้นด้วยแท็ก gorm แท็กจะเขียนอยู่ในเครื่องหมายแบ็กทิกหลังชนิดของฟิลด์ เช่น gorm:"uniqueIndex;size:255"

type User struct {
    // ID    uint    tag: gorm:"primaryKey"
    // Email string  tag: gorm:"uniqueIndex;size:255"
    // Name  string  tag: gorm:"not null"
    ID    uint
    Email string
    Name  string
}

หลักเกณฑ์การตั้งชื่อ

โดยค่าเริ่มต้น GORM จะเปลี่ยนชื่อเป็นพหูพจน์และรูปแบบขีดล่าง: โครงสร้าง User จะจับคู่กับตาราง users และฟิลด์ CreatedAt จะจับคู่กับ created_at คุณสามารถกำหนดทับค่าเหล่านี้ได้

เปิดฐานข้อมูลด้วย GORM

gorm.Open รับตัวแปลงภาษาสำหรับฐานข้อมูลของคุณและส่งคืนค่า *gorm.DB ตัวจัดการนี้ครอบกลุ่มการเชื่อมต่อไว้

db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
    log.Fatal(err)
}

AutoMigrate

AutoMigrate สร้างตาราง คอลัมน์ที่ขาดหายไป และดัชนีให้ตรงกับโครงสร้างของคุณ การทำงานนี้เป็นการเพิ่มเท่านั้น จะไม่ลบคอลัมน์หรือเปลี่ยนชนิดข้อมูลในลักษณะที่ทำลายข้อมูล

db.AutoMigrate(&User{}, &Product{})

สิ่งที่ AutoMigrate ไม่ทำ

AutoMigrate จะไม่ลบคอลัมน์ที่ไม่ได้ใช้งานหรือลดขนาดชนิดข้อมูล เพื่อหลีกเลี่ยงการสูญเสียข้อมูล หากต้องการเปลี่ยนชื่อ ลบ หรือเปลี่ยนชนิดข้อมูล คุณต้องใช้เครื่องมือย้ายโครงสร้างฐานข้อมูลโดยเฉพาะ

การจำลองการจับคู่แบบจำลองที่เรียกใช้งานได้

GORM จำเป็นต้องใช้โปรแกรมควบคุมฐานข้อมูลจริง ดังนั้นตัวอย่างที่เรียกใช้งานได้นี้จึงจำลองการจับคู่ชื่อตารางและคอลัมน์ในรูปแบบขีดล่างที่ AutoMigrate ดำเนินการ

package main

import (
    "fmt"
    "strings"
)

func toSnake(s string) string {
    var b strings.Builder
    for i, r := range s {
        if i > 0 && r >= 65 && r <= 90 {
            b.WriteByte(95)
        }
        if r >= 65 && r <= 90 {
            r = r + 32
        }
        b.WriteRune(r)
    }
    return b.String()
}

func main() {
    model := "User"
    fields := []string{"ID", "Name", "CreatedAt"}
    fmt.Println("table:", toSnake(model)+"s")
    for _, f := range fields {
        fmt.Println("column:", toSnake(f))
    }
}

ฟิลด์ DeletedAt

หากแบบจำลองของคุณฝัง gorm.Model หรือมีฟิลด์ gorm.DeletedAt GORM จะเปิดใช้ การลบแบบซ่อน แถวที่ถูกลบจะได้รับค่าประทับเวลาและถูกซ่อนจากคำค้นข้อมูล แทนที่จะถูกลบออก

ชื่อ ตารางที่กำหนดเอง

ใช้งานเมธอด TableName กับแบบจำลองเพื่อแทนที่ค่าเริ่มต้น วิธีนี้มีประโยชน์เมื่อแบบแผนฐานข้อมูลของคุณใช้ชื่อที่ไม่ตรงกับหลักเกณฑ์ของ GORM

func (User) TableName() string {
    return "app_users"
}

หมายเหตุเกี่ยวกับแพ็กเกจภายนอก

GORM และตัวแปลงภาษาของ GORM อยู่นอกไลบรารีมาตรฐาน จึงต้องใช้ go get gorm.io/gorm และโปรแกรมควบคุมอย่าง gorm.io/driver/postgres ตัวอย่างโค้ด GORM ในที่นี้มีไว้เพื่อประกอบคำอธิบาย

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความรู้เกี่ยวกับแบบจำลอง

สรุปทบทวน

คุณได้เรียนรู้เกี่ยวกับแบบจำลองและ AutoMigrate ดังนี้:

  • โครงสร้างจับคู่กับตาราง และ gorm.Model จะเพิ่ม ID กับค่าประทับเวลา
  • แท็กใช้กำหนดคีย์หลัก ดัชนี และข้อจำกัด
  • การตั้งชื่อเริ่มต้นจะเป็นรูปพหูพจน์และขีดล่าง
  • AutoMigrate เป็นการเพิ่มเท่านั้นและไม่ทำลายข้อมูล
  • DeletedAt เปิดใช้การลบแบบซ่อน

คำถามที่พบบ่อย

บทเรียน “โมเดลและ AutoMigrate” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โมเดลและ AutoMigrate” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โมเดลและ AutoMigrate”

กำหนดและย้ายโครงสร้าง คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “โมเดลและ AutoMigrate” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โมเดลและ AutoMigrate
  2. การดำเนินการ CRUD
  3. การเชื่อมโยง
  4. ฮุกและขอบเขต
← กลับไปที่ Go Academy