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

sqlx: การสแกนสตรักต์และคิวรีแบบตั้งชื่อ

ใช้ Get, Select และ NamedExec กับ sqlx

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

sqlx คืออะไร

github.com/jmoiron/sqlx ขยายความสามารถของ database/sql ด้วยการสแกนลงโครงสร้าง การสืบค้นแบบระบุชื่อ และการผูกพารามิเตอร์ในคำสืบค้น โดยเข้ากันได้กับ API ของ database/sql

sqlx.Open

เปิดการเชื่อมต่อฐานข้อมูลโดยใช้ sqlx แทน sql:

db, err := sqlx.Open("postgres", dsn)
if err != nil { log.Fatal(err) }

Get และ Select

db.Get จะสแกนแถวเดียวลงในโครงสร้าง ส่วน db.Select จะสแกนหลายแถวลงในสไลซ์:

var user User
db.GetContext(ctx, &user, "SELECT * FROM users WHERE id=$1", id)

var users []User
db.SelectContext(ctx, &users, "SELECT * FROM users WHERE active=$1", true)

แท็กของโครงสร้าง

sqlx จับคู่คอลัมน์กับฟิลด์ของโครงสร้างโดยใช้แท็ก db:

type User struct {
    ID    int    `db:"id"`
    Name  string `db:"name"`
    Email string `db:"email"`
}

การสืบค้นแบบระบุชื่อ

ใช้พารามิเตอร์ที่ระบุชื่อด้วยรูปแบบ :name และส่งโครงสร้างหรือแผนที่เข้าไป:

query := "INSERT INTO users (name, email) VALUES (:name, :email)"
_, err := db.NamedExecContext(ctx, query, user)

sqlx.In

sqlx.In ขยายสไลซ์ให้เป็นส่วนคำสั่ง SQL IN:

ids := []int{1, 2, 3}
query, args, _ := sqlx.In("SELECT * FROM users WHERE id IN (?)", ids)
query = db.Rebind(query)
db.SelectContext(ctx, &users, query, args...)

Rebind

db.Rebind(query) แปลงตัวยึดตำแหน่ง ? (ที่ sqlx.In ใช้) เป็นรูปแบบเฉพาะของไดรเวอร์ ($1, $2 สำหรับ PostgreSQL):

StructScan

สแกนแถวแต่ละแถวลงในโครงสร้างโดยใช้ rows.StructScan:

rows, _ := db.QueryxContext(ctx, "SELECT * FROM users")
for rows.Next() {
    var u User
    rows.StructScan(&u)
}

MustExec

db.MustExec ดำเนินการสืบค้นและทำให้เกิดแพนิกเมื่อพบข้อผิดพลาด เหมาะสำหรับการย้ายโครงสร้างฐานข้อมูลหรือการตั้งค่าการทดสอบที่ข้อผิดพลาดต้องทำให้หยุดทำงานเสมอ

db.MustExec(schema)

Unsafe

db.Unsafe() จะส่งคืนรุ่นที่ละเว้นคอลัมน์ที่จับคู่ไม่ได้โดยไม่แจ้งข้อผิดพลาด เหมาะเมื่อ SELECT ส่งคืนคอลัมน์มากกว่าจำนวนฟิลด์ในโครงสร้าง

sqlx กับ ORM

sqlx ให้คุณควบคุม SQL ได้อย่างเต็มที่พร้อมการผูกกับโครงสร้างแบบเนทีฟของ Go ส่วน ORM อย่าง GORM จะซ่อน SQL แต่อาจสร้างการสืบค้นที่ไม่คาดคิด ใช้ sqlx เมื่อคุณต้องการ SQL ที่ระบุอย่างชัดเจนพร้อมการสแกนที่ใช้งานสะดวก

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

db.SelectContext ทำหน้าที่อะไรใน sqlx

สรุป: sqlx

ประเด็นสำคัญ:

  • Get/Select สแกนข้อมูลลงในโครงสร้างโดยตรงโดยใช้แท็ก db
  • การสืบค้นแบบระบุชื่อใช้รูปแบบ :name และ NamedExecContext
  • sqlx.In + Rebind สำหรับส่วนคำสั่ง IN ที่ใช้สไลซ์
  • StructScan สำหรับสแกนแต่ละแถวลงในโครงสร้างระหว่างลูป

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

บทเรียน “sqlx: การสแกนสตรักต์และคิวรีแบบตั้งชื่อ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “sqlx: การสแกนสตรักต์และคิวรีแบบตั้งชื่อ”

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

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

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

บทเรียน “sqlx: การสแกนสตรักต์และคิวรีแบบตั้งชื่อ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. database/sql และไดรเวอร์
  2. sqlx: การสแกนสตรักต์และคิวรีแบบตั้งชื่อ
  3. pgx: ไดรเวอร์ PostgreSQL ประสิทธิภาพสูง
  4. ธุรกรรมและการย้ายโครงสร้างฐานข้อมูล
← กลับไปที่ Go Academy