DSN(Data Source Name)的写法:root:password123@tcp(127.0.0.1:3306)/shop?charset=utf8mb4&parseTime=True&loc=Local
// 需要安装:go get -u github.com/go-sql-driver/mysql package main import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) func main() { // 连接字符串格式:username:password@protocol(address)/dbname?param=value dsn := "root:password123@tcp(127.0.0.1:3306)/shop?charset=utf8mb4&parseTime=True&loc=Local" // "mysql"是 Go 中 数据库驱动名称,告诉 database/sql 标准库:“我要使用哪个具体的数据库驱动(连接器)来处理这个连接。” db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal("连接失败:", err) } defer db.Close() // 检查连接 err = db.Ping() if err != nil { log.Fatal("无法连接数据库:", err) } fmt.Println("成功连接 MySQL!") }
// 插入数据 result, err := db.Exec("INSERT INTO users(name, email) VALUES(?, ?)", "Alice", "alice@example.com") id, _ := result.LastInsertId() fmt.Println("新用户ID:", id) // 查询数据(单行) var name, email string err := db.QueryRow("SELECT name, email FROM users WHERE id = ?", 1).Scan(&name, &email) fmt.Println(name, email) // 查询多行 rows, err := db.Query("SELECT id, name FROM users") defer rows.Close() for rows.Next() { var id int var name string rows.Scan(&id, &name) fmt.Println(id, name) } // 更新数据 _, err := db.Exec("UPDATE users SET name=? WHERE id=?", "Bob", 1) // 删除数据 _, err := db.Exec("DELETE FROM users WHERE id=?", 1)