答案:掌握Golang操作MySQL需完成连接、建表、增删改查和预编译。先用database/sql和go-sql-driver/mysql驱动连接数据库,定义结构体映射表字段,通过Exec和Query执行增删改查,使用Prepare预编译提升安全与性能,原生sql包足够项目初期使用。

刚接触Golang时,数据库操作是绕不开的一环。很多初学者会卡在连接数据库、执行查询、处理结果这些基础环节上。其实只要掌握几个核心步骤,就能快速上手。下面以一个简单的用户管理系统为例,带你用Golang操作MySQL数据库,完成增删改查功能。
连接MySQL数据库
Go语言通过database/sql包提供数据库支持,配合第三方驱动如go-sql-driver/mysql操作MySQL。先安装驱动:
go get -u github.com/go-sql-driver/mysql
然后编写连接代码:
立即学习“go语言免费学习笔记(深入)”;
package mainimport ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql")func main() { dsn := "user:password@tcp(127.0.0.1:3306)/testdb" 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("数据库连接成功")}
sql.Open只是初始化连接池,真正验证连接要用Ping()。DSN格式要写对,否则容易连不上。
建表与结构体映射
在数据库中创建用户表:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL);
在Go中定义对应的结构体:
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"`}
结构体字段的标签(如json:”name”)方便后续API返回,数据库操作时Go会自动匹配字段名。
实现增删改查操作
插入一条用户记录:
func createUser(db *sql.DB, name, email string) (int64, error) { result, err := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", name, email) if err != nil { return 0, err } return result.LastInsertId()}
查询单条记录:
func getUser(db *sql.DB, id int) (*User, error) { user := &User{} row := db.QueryRow("SELECT id, name, email FROM users WHERE id = ?", id) err := row.Scan(&user.ID, &user.Name, &user.Email) if err != nil { return nil, err } return user, nil}
查询多条记录:
func listUsers(db *sql.DB) ([]User, error) { rows, err := db.Query("SELECT id, name, email FROM users") if err != nil { return nil, err } defer rows.Close() var users []User for rows.Next() { var u User err := rows.Scan(&u.ID, &u.Name, &u.Email) if err != nil { return nil, err } users = append(users, u) } return users, nil}
更新和删除类似,使用Exec执行UPDATE和DELETE语句即可。
使用Prepare提升性能与安全
如果需要多次执行相同SQL,建议使用Prepare预编译:
stmt, err := db.Prepare("INSERT INTO users (name, email) VALUES (?, ?)")if err != nil { log.Fatal(err)}defer stmt.Close()_, err = stmt.Exec("Alice", "alice@example.com")_, err = stmt.Exec("Bob", "bob@example.com")
预编译能防止SQL注入,同时提升批量操作的性能。
基本上就这些。连接、建表、增删改查、预编译,这几个环节走通,Golang操作数据库的门槛就跨过去了。项目初期不需要引入ORM,原生database/sql完全够用,逻辑清晰也不容易出错。
以上就是Golang入门项目中数据库操作实战的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1403545.html
微信扫一扫
支付宝扫一扫