Golang入门项目中数据库操作实战

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

golang入门项目中数据库操作实战

刚接触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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
使用Selenium模拟登录后重定向报404错误的原因是什么?如何解决?
上一篇 2026年5月10日 10:33:07
em、rem、vh、vw单位在浏览器渲染时,真的都最终换算成像素吗?
下一篇 2026年5月10日 10:33:08

相关推荐

发表回复

登录后才能评论
关注微信