匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Golang中的数据库连接和操作:MySQL和PostgreSQL实例

Golang中的数据库连接和操作:MySQL和PostgreSQL实例

Golang是一门非常流行的编程语言,它被广泛的应用于各种应用程序开发与运维中。在开发应用程序时,我们通常需要与数据库进行交互,本文将介绍如何在Golang中连接和操作MySQL和PostgreSQL数据库。

一、MySQL数据库连接与操作

1. 安装MySQL驱动

在Golang中连接MySQL,需要先安装MySQL驱动,我们可以通过以下命令进行安装:

```
go get -u github.com/go-sql-driver/mysql
```

2. 连接MySQL数据库

连接MySQL数据库需要使用database/sql包和go-sql-driver/mysql包,示例代码如下:

```
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 数据库连接信息
    db, err := sql.Open("mysql",
        "root:password@tcp(127.0.0.1:3306)/test")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 测试连接是否成功
    err = db.Ping()
    if err != nil {
        panic(err)
    }

    fmt.Println("连接成功")
}
```

3. 执行SQL操作

连接成功后,我们就可以通过sql.DB对象进行SQL操作了,示例代码如下:

```
// 查询
rows, err := db.Query("SELECT * FROM users")
if err != nil {
    panic(err)
}
defer rows.Close()

for rows.Next() {
    var (
        id   int
        name string
        age  int
    )
    err = rows.Scan(&id, &name, &age)
    if err != nil {
        panic(err)
    }
    fmt.Println(id, name, age)
}

// 插入
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
if err != nil {
    panic(err)
}
defer stmt.Close()

res, err := stmt.Exec("Tom", 20)
if err != nil {
    panic(err)
}

id, err := res.LastInsertId()
if err != nil {
    panic(err)
}
fmt.Println("插入成功,id=", id)

// 更新
stmt, err = db.Prepare("UPDATE users SET age=? WHERE name=?")
if err != nil {
    panic(err)
}
defer stmt.Close()

res, err = stmt.Exec(21, "Tom")
if err != nil {
    panic(err)
}

affected, err := res.RowsAffected()
if err != nil {
    panic(err)
}
fmt.Println("更新成功,影响的行数=", affected)

// 删除
stmt, err = db.Prepare("DELETE FROM users WHERE name=?")
if err != nil {
    panic(err)
}
defer stmt.Close()

res, err = stmt.Exec("Tom")
if err != nil {
    panic(err)
}

affected, err = res.RowsAffected()
if err != nil {
    panic(err)
}
fmt.Println("删除成功,影响的行数=", affected)
```

二、PostgreSQL数据库连接与操作

1. 安装PostgreSQL驱动

在Golang中连接PostgreSQL,需要先安装PostgreSQL驱动,我们可以通过以下命令进行安装:

```
go get -u github.com/lib/pq
```

2. 连接PostgreSQL数据库

连接PostgreSQL数据库需要使用database/sql包和lib/pq包,示例代码如下:

```
import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    // 数据库连接信息
    db, err := sql.Open("postgres",
        "user=postgres password=password host=127.0.0.1 port=5432 dbname=test sslmode=disable")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 测试连接是否成功
    err = db.Ping()
    if err != nil {
        panic(err)
    }

    fmt.Println("连接成功")
}
```

3. 执行SQL操作

连接成功后,我们就可以通过sql.DB对象进行SQL操作了,示例代码如下:

```
// 查询
rows, err := db.Query("SELECT * FROM users")
if err != nil {
    panic(err)
}
defer rows.Close()

for rows.Next() {
    var (
        id   int
        name string
        age  int
    )
    err = rows.Scan(&id, &name, &age)
    if err != nil {
        panic(err)
    }
    fmt.Println(id, name, age)
}

// 插入
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES($1, $2)")
if err != nil {
    panic(err)
}
defer stmt.Close()

res, err := stmt.Exec("Tom", 20)
if err != nil {
    panic(err)
}

id, err := res.LastInsertId()
if err != nil {
    panic(err)
}
fmt.Println("插入成功,id=", id)

// 更新
stmt, err = db.Prepare("UPDATE users SET age=$1 WHERE name=$2")
if err != nil {
    panic(err)
}
defer stmt.Close()

res, err = stmt.Exec(21, "Tom")
if err != nil {
    panic(err)
}

affected, err := res.RowsAffected()
if err != nil {
    panic(err)
}
fmt.Println("更新成功,影响的行数=", affected)

// 删除
stmt, err = db.Prepare("DELETE FROM users WHERE name=$1")
if err != nil {
    panic(err)
}
defer stmt.Close()

res, err = stmt.Exec("Tom")
if err != nil {
    panic(err)
}

affected, err = res.RowsAffected()
if err != nil {
    panic(err)
}
fmt.Println("删除成功,影响的行数=", affected)
```

总结

通过以上示例代码,我们可以看出Golang连接和操作MySQL和PostgreSQL数据库的流程及方法。在实际应用中,我们需要根据项目的需求进行相应的配置和操作,避免发生意外错误。希望本文能为大家解决一些Golang连接数据库的问题。