以下是一个示例代码,演示如何使用Go语言连接MySQL数据库并进行增删改查操作:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
ID int
Name string
Age int
}
func main() {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/mydatabase")
if err != nil {
fmt.Println("数据库连接失败:", err)
return
}
defer db.Close()
err = db.Ping()
if err != nil {
fmt.Println("无法连接到数据库:", err)
return
}
fmt.Println("成功连接到数据库!")
createTable(db)
user1 := User{
ID: 1,
Name: "Alice",
Age: 25,
}
insertUser(db, user1)
user2 := User{
ID: 2,
Name: "Bob",
Age: 30,
}
insertUser(db, user2)
users := getUsers(db)
fmt.Println("查询所有用户:")
for _, user := range users {
fmt.Printf("ID:%d, 姓名:%s, 年龄:%d\n", user.ID, user.Name, user.Age)
}
updateUser(db, User{ID: 1, Name: "Alice Updated", Age: 26})
deleteUser(db, 2)
users = getUsers(db)
fmt.Println("查询所有用户:")
for _, user := range users {
fmt.Printf("ID:%d, 姓名:%s, 年龄:%d\n", user.ID, user.Name, user.Age)
}
}
func createTable(db *sql.DB) {
stmt, err := db.Prepare("CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT)")
if err != nil {
fmt.Println("创建表失败:", err)
return
}
_, err = stmt.Exec()
if err != nil {
fmt.Println("执行创建表语句失败:", err)
return
}
fmt.Println("成功创建表!")
}
func insertUser(db *sql.DB, user User) {
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES (?, ?)")
if err != nil {
fmt.Println("插入数据失败:", err)
return
}
defer stmt.Close()
result, err := stmt.Exec(user.Name, user.Age)
if err != nil {
fmt.Println("执行插入语句失败:", err)
return
}
lastInsertID, _ := result.LastInsertId()
rowsAffected, _ := result.RowsAffected()
fmt.Printf("成功插入用户,ID:%d,影响行数:%d\n", lastInsertID, rowsAffected)
}
func getUsers(db *sql.DB) []User {
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
fmt.Println("查询数据失败:", err)
return nil
}
defer rows.Close()
var users []User
for rows.Next() {
var user User
if err := rows.Scan(&user.ID, &user.Name, &user.Age);err!=nil{
fmt.Printf("读取数据出错:%s\n",err.Error())
continue
}
users = append(users,user)
}
return users
}
func updateUser(db *sql.DB,user User){
stmt,err:=db.Prepare("UPDATE users SET name=?,age=? WHERE id=?")
if err != nil {
fmt.Println("更新数据失败:",err)
return
}
defer stmt.Close()
result,err:=stmt.Exec(user.Name,user.Age,user.ID)
if err != nil {
fmt.Println("执行更新语句失败:",err)
return
}
rowsAffected,_:=result.RowsAffected()
fmt.Printf("成功更新用户,ID:%d,影响行数:%d\n", user.ID, rowsAffected)
}
func deleteUser(db *sql.DB,id int){
stmt,err:=db.Prepare("DELETE FROM users WHERE id=?")
if err != nil {
fmt.Println("删除数据失败:",err)
return
}
defer stmt.Close()
result,err:=stmt.Exec(id)
if err != nil {
fmt.Println("执行删除语句失败:",err)
return
}
rowsAffected,_:=result.RowsAffected()
fmt.Printf("成功删除用户,ID:%d,影响行数:%d\n", id, rowsAffected)
}
请注意,需要将root:password@tcp(127.0.0.1:3306)/mydatabase中的数据库连接信息替换为你自己的实际连接信息,并确保已经安装了github.com/go-sql-driver/mysql这个库。此示例代码包括创建表、插入数据、查询数据、更新数据和删除数据等操作。
内容由零声教学AI助手提供,问题来源于学员提问




