go 封装mysql操作
时间: 2023-06-28 21:07:11 浏览: 45
在 Go 中,我们可以使用第三方库 `database/sql` 来操作 MySQL 数据库。下面是一个简单的封装示例:
```go
package mysql
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type DB struct {
*sql.DB
}
func NewDB(username, password, host, port, database string) (*DB, error) {
// 连接 MySQL 数据库
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", username, password, host, port, database)
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
}
// 返回封装后的 DB 实例
return &DB{db}, nil
}
func (db *DB) Query(query string, args ...interface{}) (*sql.Rows, error) {
// 执行 SQL 查询语句
rows, err := db.DB.Query(query, args...)
if err != nil {
return nil, err
}
return rows, nil
}
func (db *DB) Exec(query string, args ...interface{}) (sql.Result, error) {
// 执行 SQL 修改语句
result, err := db.DB.Exec(query, args...)
if err != nil {
return nil, err
}
return result, nil
}
func (db *DB) Close() error {
// 关闭 MySQL 数据库连接
return db.DB.Close()
}
```
上述代码中,我们定义了一个 `DB` 结构体,包含了一个 `*sql.DB` 指针类型的字段。我们使用 `NewDB` 函数来创建一个 `DB` 实例,使用 `Query` 和 `Exec` 方法来执行 SQL 查询和修改语句,使用 `Close` 方法来关闭数据库连接。
使用示例:
```go
db, err := mysql.NewDB("root", "password", "localhost", "3306", "testdb")
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT * FROM users WHERE age > ?", 18)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
panic(err)
}
fmt.Println(id, name, age)
}
result, err := db.Exec("INSERT INTO users(name, age) VALUES(?, ?)", "John Doe", 25)
if err != nil {
panic(err)
}
lastInsertId, err := result.LastInsertId()
if err != nil {
panic(err)
}
fmt.Println(lastInsertId)
```