在Golang中通过database/sql实现MySQL的CRUD操作,需先用sql.Open连接数据库并设置连接池。定义User结构体映射表字段,使用db.Exec执行插入、更新和删除,db.QueryRow查询单条数据,db.Query遍历多条记录,配合Scan赋值。主函数调用示例验证流程,建议封装为DAO层或使用ORM提升开发效率。

在Golang中实现数据库的增删改查(CRUD)操作是后端开发的基础技能。通过标准库database/sql结合第三方驱动(如github.com/go-sql-driver/mysql),可以轻松对接MySQL、PostgreSQL等关系型数据库。下面以MySQL为例,演示一个完整的CRUD项目结构和核心代码实现。
连接数据库
使用sql.Open初始化数据库连接,并通过db.Ping()测试连通性。建议设置连接池参数提升性能。
示例代码:
package mainimport ( "database/sql" "log" _ "github.com/go-sql-driver/mysql")var db *sql.DBfunc initDB() { var err error dsn := "user:password@tcp(127.0.0.1:3306)/testdb" db, err = sql.Open("mysql", dsn) if err != nil { log.Fatal("打开数据库失败:", err) } if err = db.Ping(); err != nil { log.Fatal("连接数据库失败:", err) } db.SetMaxOpenConns(10) db.SetMaxIdleConns(5)}
定义数据模型
创建结构体映射数据库表字段,便于数据传递和处理。例如用户表users包含ID、姓名和邮箱。
立即学习“go语言免费学习笔记(深入)”;
稿定抠图
AI自动消除图片背景
76 查看详情
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"`}
实现增删改查操作
基于预处理语句执行SQL,防止注入攻击,提高执行效率。
插入数据(Create)
func createUser(user User) (int64, error) { sqlStr := "INSERT INTO users(name, email) VALUES(?, ?)" result, err := db.Exec(sqlStr, user.Name, user.Email) if err != nil { return 0, err } return result.LastInsertId()}
查询单条记录(Read One)
func getUser(id int) (*User, error) { user := &User{} sqlStr := "SELECT id, name, email FROM users WHERE id = ?" row := db.QueryRow(sqlStr, id) if err := row.Scan(&user.ID, &user.Name, &user.Email); err != nil { return nil, err } return user, nil}
查询多条记录(Read All)
func getAllUsers() ([]User, error) { sqlStr := "SELECT id, name, email FROM users" rows, err := db.Query(sqlStr) if err != nil { return nil, err } defer rows.Close() var users []User for rows.Next() { var u User if err := rows.Scan(&u.ID, &u.Name, &u.Email); err != nil { return nil, err } users = append(users, u) } return users, nil}
更新数据(Update)
func updateUser(user User) error { sqlStr := "UPDATE users SET name=?, email=? WHERE id=?" _, err := db.Exec(sqlStr, user.Name, user.Email, user.ID) return err}
删除数据(Delete)
func deleteUser(id int) error { sqlStr := "DELETE FROM users WHERE id = ?" _, err := db.Exec(sqlStr, id) return err}
整合到主程序
在main函数中调用上述方法完成流程验证。可结合flag或HTTP接口暴露服务。
func main() { initDB() defer db.Close() // 示例:插入用户 newUser := User{Name: "Alice", Email: "alice@example.com"} id, _ := createUser(newUser) log.Printf("新增用户,ID: %dn", id) // 查询用户 user, _ := getUser(int(id)) log.Printf("查得用户: %+vn", user)}
基本上就这些。只要掌握Exec用于插入、更新、删除,QueryRow和Query用于查询,再配合结构体与Scan方法,就能稳定实现CRUD逻辑。实际项目中可进一步封装成DAO层,或使用GORM等ORM框架简化操作。
以上就是如何在Golang中实现简单的数据库增删改查_Golang数据库CRUD项目实战汇总的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1024871.html
微信扫一扫
支付宝扫一扫