มีไดร์เวอร์บางตัวให้ใช้ แต่คุณควรพิจารณาเฉพาะไดรเวอร์ที่ใช้ฐานข้อมูล / sql API เป็น
- มันมีไวยากรณ์ที่สะอาดและมีประสิทธิภาพ
- มันช่วยให้คุณสามารถเปลี่ยนไดรเวอร์ได้ในภายหลังโดยไม่ต้องเปลี่ยนรหัสนอกเหนือจากการนำเข้าและการเชื่อมต่อ
MySQL มีสองไดรเวอร์ที่รวดเร็วและเชื่อถือได้:
ฉันใช้ทั้งสองอย่างในการผลิตโปรแกรมกำลังทำงานเป็นเวลาหลายเดือนโดยมีหมายเลขการเชื่อมต่อเป็นล้าน ๆ โดยไม่ล้มเหลว
ไดรเวอร์ฐานข้อมูล SQL อื่น ๆมีการระบุไว้ในระหว่างการเดินทาง-วิกิพีเดีย
นำเข้าเมื่อใช้ MyMySQL:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
นำเข้าเมื่อใช้ Go-MySQL-Driver:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
การเชื่อมต่อและปิดโดยใช้ MyMySQL:
con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns
การเชื่อมต่อและปิดโดยใช้ไดรเวอร์ของ Go-MySQL:
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
เลือกหนึ่งแถว:
row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)
เลือกหลายแถวและสร้างอาร์เรย์พร้อมผลลัพธ์:
rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
err = rows.Scan(&ida, &idb)
if err != nil { /* error handling */}
items = append(items, &SomeStruct{ida, idb})
}
แทรก:
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
คุณจะเห็นว่าการทำงานกับ Go with MySQL เป็นประสบการณ์ที่น่ายินดี: ฉันไม่เคยมีปัญหาเซิร์ฟเวอร์ของฉันทำงานมาหลายเดือนโดยไม่มีข้อผิดพลาดหรือรั่วไหล ความจริงที่ว่าฟังก์ชั่นส่วนใหญ่นั้นใช้จำนวนอาร์กิวเมนต์ที่หลากหลายทำให้งานที่น่าเบื่อในหลายภาษานั้นเบาลง
โปรดทราบว่าหากในอนาคตคุณต้องใช้ไดรเวอร์ MySQL ตัวอื่นคุณจะต้องเปลี่ยนสองบรรทัดในไฟล์ go เดียว: บรรทัดที่ทำการอิมพอร์ตและบรรทัดที่เปิดการเชื่อมต่อ