前言:
此时小伙伴们对“go语言的数据库”大约比较着重,我们都需要分析一些“go语言的数据库”的相关文章。那么小编在网络上收集了一些对于“go语言的数据库””的相关文章,希望看官们能喜欢,小伙伴们一起来了解一下吧!上一章,讲解了怎么样研发出一个取名系统后台逻辑部分,并利用控制台回合输出自己满意的名字。
这一章,主要讲解怎么样利用go语言访问mysql数据库。
mysql数据库搭建
官网地址:
点击download
下滑,找到MySQL Community (GPL) Downloads 点击
选择需要下载的服务MySQL Community Server
下载安装包
下载完之后,就可以跟安装软件一样去安装了。
创建数据库表
我们利用go语言访问我们的数据库。
创建表语句:
CREATE TABLE `test` ( `id` int NOT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
插入数据:
go代码访问mysql数据库
我们要引入mysql操作包,正常直接go get -u github.com/go-sql-driver/mysql,可能会报错,
导致下载不了
报错:go: module github.com/go-sql-driver/mysql: Get ";: dial tcp 172.217.163.49:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
这里我们要设置代理服务:goproxy.cn
PS D:\work\workspace\go\name-generate\db> go env -w GO111MODULE=on
PS D:\work\workspace\go\name-generate\db> go env -w GOPROXY=
goproxy.cn是国内一个流行的Go模块代理,direct表示如果模块代理服务器无法访问时,Go将直接访问模块存储库。
设置完成后,你可以正常使用go get来获取依赖
PS D:\work\workspace\go\name-generate\db> go get -u github.com/go-sql-driver/mysql
go: downloading github.com/go-sql-driver/mysql v1.8.1
go: downloading filippo.io/edwards25519 v1.1.0
go: added filippo.io/edwards25519 v1.1.0
go: added github.com/go-sql-driver/mysql v1.8.1
命令行出现这个,就代表获取mysql操作包成功了。
编写go代码,操作数据库,获取数据库中的数据,还是在name-generate的项目中创建目录db,然后创建db_opt.go文件实例,如下图:
数据库连接配置信息编写:
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local","root", "root", "localhost", 3306, "test002")
tips:这个一定要调整好属于自己的配置信息
查询编号ID=4的数据,【rows, err := dbOperator.QueryDemo(db, "SELECT * FROM test WHERE id = ?", 4)】如下图:
在db目录的vs终端,执行go run . 命令,查询刚才添加的数据,如下图:
整个db_opt.go的源代码:
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log") // 定义数据库配置结构体type DBConfig struct { Host string Port int User string Password string DBName string}//定义一个用户类,包含id和nametype User struct { ID int Name string} // 定义数据库操作接口type DBOperator interface { OpenConnection() (*sql.DB, error) CloseConnection(db *sql.DB) error QueryRowDemo(db *sql.DB, query string, args ...interface{}) (*sql.Row, error) QueryDemo(db *sql.DB, query string, args ...interface{}) (*sql.Rows, error) ExecDemo(db *sql.DB, query string, args ...interface{}) (sql.Result, error)} // 实现数据库操作接口type MySQLDB struct{} func (mysql *MySQLDB) OpenConnection() (*sql.DB, error) { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "root", "root", "localhost", 3306, "test002") db, err := sql.Open("mysql", dsn) if err != nil { return nil, err } err = db.Ping() if err != nil { return nil, err } return db, nil} func (mysql *MySQLDB) CloseConnection(db *sql.DB) error { return db.Close()} func (mysql *MySQLDB) QueryRowDemo(db *sql.DB, query string, args ...interface{}) (*sql.Row, error) { return db.QueryRow(query, args...), nil} func (mysql *MySQLDB) QueryDemo(db *sql.DB, query string, args ...interface{}) (*sql.Rows, error) { return db.Query(query, args...)} func (mysql *MySQLDB) ExecDemo(db *sql.DB, query string, args ...interface{}) (sql.Result, error) { return db.Exec(query, args...)} func main() { dbOperator := &MySQLDB{} db, err := dbOperator.OpenConnection() if err != nil { log.Fatal(err) } defer dbOperator.CloseConnection(db) // 使用db进行数据库操作 rows, err := dbOperator.QueryDemo(db, "SELECT * FROM test WHERE id = ?", 4) if err != nil { log.Fatal("Error querying database:", err) } defer rows.Close() // 遍历查询结果 for rows.Next() { var id int var name string err := rows.Scan(&id, &name) if err != nil { log.Fatal("Error scanning row:", err) } fmt.Printf("ID: %d, Name: %s\n", id, name) } if err := rows.Err(); err != nil { log.Fatal(err) }}
到这里,我们的数据访问程序就结束了。
下一章,我们将把我的取名程序改造一下,我们的名称定义将放在数据库中维护,这样使我们的取名程序更加的系统化吧
标签: #go语言的数据库 #如何获取数据库里面的数据信息