Overview
Scenarios
Product Architecture
Instance Types
Compatibility Notes
Usage specification recommendations
go get -u github.com/go-sql-driver/mysql
package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql")func main() {// Connect to the databasedb, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")if err != nil {log.Fatal(err)}defer db.Close()// Test connectionerr = db.Ping()if err != nil {log.Fatal(err)}fmt.Println("Connected to MySQL database!")}
db.SetMaxOpenConns(25) // Maximum Open Connectionsdb.SetMaxIdleConns(5) // Maximum Idle Connectionsdb.SetConnMaxLifetime(5 * time.Minute) // Maximum connection lifetime
query := `CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)`_, err := db.Exec(query)if err != nil {log.Fatal(err)}
query := "INSERT INTO users (username, email) VALUES (?, ?)"result, err := db.Exec(query, "john_doe", "john@example.com")if err != nil {log.Fatal(err)}id, err := result.LastInsertId()if err != nil {log.Fatal(err)}
query := "UPDATE users SET email = ? WHERE username = ?"result, err := db.Exec(query, "new_email@example.com", "john_doe")if err != nil {log.Fatal(err)}rowsAffected, err := result.RowsAffected()if err != nil {log.Fatal(err)}
query := "DELETE FROM users WHERE username = ?"result, err := db.Exec(query, "john_doe")if err != nil {log.Fatal(err)}rowsAffected, err := result.RowsAffected()if err != nil {log.Fatal(err)}
go get -u gorm.io/gormgo get -u gorm.io/driver/mysql
dsn := "user:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
package mainimport ("gorm.io/driver/mysql""gorm.io/gorm")func main() {dsn := "root:yourpassword@tcp(127.0.0.1:3306)/yourdb?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic("failed to connect database")}// Use the db object to perform database operations...}
type User struct {gorm.ModelName stringEmail string `gorm:"unique"`Age int}
// Auto Migration Modeerr = db.AutoMigrate(&User{})if err != nil {panic("failed to migrate database")}
// Create a single useruser := User{Name: "Zhang San", Email: "zhangsan@example.com", Age: 25}result := db.Create(&user)if result.Error != nil {panic(result.Error)}// Batch createusers := []User{{Name: "Li Si", Email: "lisi@example.com", Age: 30},{Name: "Wang Wu", Email: "wangwu@example.com", Age: 28},}db.Create(&users)
// Query a single uservar user Userdb.First(&user, 1) // Query by primary keydb.First(&user, "name = ?", "Zhang San") // Query by condition// Query multiple usersvar users []Userdb.Find(&users) // Query all usersdb.Where("age > ?", 25).Find(&users) // Conditional query
// Update a single fielddb.Model(&user).Update("name", "Zhang San's new name")// Update multiple fieldsdb.Model(&user).Updates(User{Name: "Zhang San's new name", Age: 26})// Conditional updatedb.Model(&User{}).Where("age < ?", 30).Update("age", gorm.Expr("age + ?", 1))
// Delete a single recorddb.Delete(&user)// Delete conditionallydb.Where("name = ?", "Li Si").Delete(&User{})// Soft delete (if the model includes gorm.Model)db.Delete(&user) // only sets the deleted_at field
피드백