GoLang MySQL CRUD 示例
MySQL 是世界上最常用的关系数据库引擎之一。它提供了一个简单明了的界面以及与许多不同编程语言的集成。在这篇文章中,我们将使用 GoLang 连接到 MySQL。
安装 MySQL
在任何操作系统中安装 MySQL 都非常简单。它有多种安装方式。可以下载一个独立的安装程序或简单地下载一个堆栈分发安装程序,如 XAMPP。两者的工作方式相同。
安装 MySQL 后,打开命令提示符检查 MySQL 是否安装正确。
运行此命令:
1
|
mysql -V |
它将显示安装的 MySQL 版本,如下所示。

确保您有用户帐户设置。如果你是通过 XAMPP 安装的,那么从PHPMyAdmin就可以很容易地创建一个用户。

如您所见,下面是添加新用户的选项。只需添加一个具有所有权限的人。或者,您也可以使用 root,尽管它没有密码。因此,您可能需要自己设置。
所需包
要连接到 MySQL,我们需要一个驱动程序。这是我们将要使用的驱动程序。要将其安装到 GOPATH 中,我们只需运行此命令。
1
|
go get -u https: //github.com/go-sql-driver/mysql |
它将安装软件包。
转到 MySQL 示例
现在,我们将看看如何在 Go 中使用 MySQL。在这里,我们使用准备好的语句。这是处理 SQL 数据库的最佳方式。
数据库结构
该数据库由以 id 作为主键的帖子、帖子名称和帖子文本组成。
因此,我们定义了将要使用的数据结构。
1
2
3
4
5
|
type Post struct { Id int Name string Text string } |
插入数据库
首先,我们创建一个连接并检查它是否正常工作。
1
2
3
4
5
6
|
db, e := sql.Open( "mysql" , "<user>:<password>@/<databasename>" ) ErrorCheck(e) // close database after all work is done defer db.Close() PingDB(db) |
其中ping功能如下:
1
2
3
4
|
func PingDB(db *sql.DB) { err := db.Ping() ErrorCheck(err) } |
错误检查功能很简单。
1
2
3
4
5
|
func ErrorCheck(err error) { if err != nil { panic(err.Error()) } } |
帖子表如下所示:

现在,我们可以开始使用代码向其中插入数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// INSERT INTO DB // prepare stmt, e := db.Prepare( "insert into posts(id, Name, Text) values (?, ?, ?)" ) ErrorCheck(e) //execute res, e := stmt.Exec( "5" , "Post five" , "Contents of post 5" ) ErrorCheck(e) id, e := res.LastInsertId() ErrorCheck(e) fmt.Println( "Insert id" , id) |

插入posts表后变为:

更新数据
现在,我们将更新帖子五。这是我们如何做到这一点的。
1
2
3
4
5
6
7
8
9
10
11
12
|
//Update db stmt, e := db.Prepare( "update posts set Text=? where id=?" ) ErrorCheck(e) // execute res, e := stmt.Exec( "This is post five" , "5" ) ErrorCheck(e) a, e := res.RowsAffected() ErrorCheck(e) fmt.Println(a) // 1 |
更新数据后,表格如下所示:

查询数据
现在,我们可以简单地查询所有数据。我们遍历所有行并将其放入结构中。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// query all data rows, e := db.Query( "select * from posts" ) ErrorCheck(e) // declare empty post variable var post = Post{} // iterate over rows for rows.Next() { e = rows.Scan(&post.Id, &post.Name, &post.Text) ErrorCheck(e) fmt.Println(post) } |

删除数据
删除数据既简单又简单。这是一个按 id 删除的示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// delete data stmt, e := db.Prepare( "delete from posts where id=?" ) ErrorCheck(e) // delete 5th post res, e := stmt.Exec( "5" ) ErrorCheck(e) // affected rows a, e := res.RowsAffected() ErrorCheck(e) fmt.Println(a) // 1 |

可以看出,一切都很完美。
完整代码
package main
import (
“database/sql”
“fmt”
_ “github.com/go-sql-driver/mysql”
)
type Post struct {
Id int
Name string
Text string
}
func main() {
db, e := sql.Open(“mysql”, “rootuser:pass1234@/posts”)
ErrorCheck(e)
// close database after all work is done
defer db.Close()
PingDB(db)
// INSERT INTO DB
// prepare
stmt, e := db.Prepare(“insert into posts(id, Name, Text) values (?, ?, ?)”)
ErrorCheck(e)
//execute
res, e := stmt.Exec(“5”, “Post five”, “Contents of post 5”)
ErrorCheck(e)
id, e := res.LastInsertId()
ErrorCheck(e)
fmt.Println(“Insert id”, id)
//Update db
stmt, e := db.Prepare(“update posts set Text=? where id=?”)
ErrorCheck(e)
// execute
res, e := stmt.Exec(“This is post five”, “5”)
ErrorCheck(e)
a, e := res.RowsAffected()
ErrorCheck(e)
fmt.Println(a)
// query all data
rows, e := db.Query(“select * from posts”)
ErrorCheck(e)
var post = Post{}
for rows.Next() {
e = rows.Scan(&post.Id, &post.Name, &post.Text)
ErrorCheck(e)
fmt.Println(post)
}
// delete data
stmt, e := db.Prepare(“delete from posts where id=?”)
ErrorCheck(e)
// delete 5th post
res, e := stmt.Exec(“5”)
ErrorCheck(e)
// affected rows
a, e := res.RowsAffected()
ErrorCheck(e)
fmt.Println(a) // 1
}
func ErrorCheck(err error) {
if err != nil {
panic(err.Error())
}
}
func PingDB(db *sql.DB) {
err := db.Ping()
ErrorCheck(err)
}