Go作为一种编程语言,有许多库和框架可用于简化系统级编程,常被企业作为业务语言,而业务的处理,更是离不开数据库的支持,今天来用go连接一下数据库,以MySQL为例。
驱动安装
打开Go语言的官网:golang.google.cn/
点击package
搜索mysql,打开第一个
点击installation
跳转如下
这段代码即为下载mysql驱动的代码,但如果此时我们直接在goland的终端输入这段代码会报错,是因为go get命令不再支持在不带模块的目录中使用
所以我们先创建go.mod文件,在Go语言中,go mod init 是一个命令,用于初始化一个现有的go.mod文件。go mod init 命令会在指定的目录下创建一个新的go.mod文件,并将其内容设置为module的模块声明。
这个命令可以用于在没有安装任何包的情况下初始化一个包,或者在已经有go.mod文件的情况下更新其内容。
go mod init
打开终端,输入go mod init+项目名,
这时会自动创建go.mod文件,创建好后再输入安装驱动的命令:
go get -u github.com/go-sql-driver/mysql
由于GitHub是由国外服务器代理,可能有的人执行这段命令会显示连接超时问题
我们可以切换一下代理 :go env -w GOPROXY=goproxy.cn
再执行刚才的命令,可以看见成功下载
至此,MySQL的驱动安装已经成功。
连接MySQL
回到刚才installation的页面,下滑可以看见usage
测试代码如下
import (
"database/sql"
"time"
_ "github.com/go-sql-driver/mysql"
)
// ...
db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
panic(err)
}
// See "Important settings" section.
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
把user和password改成自己MySQL的,后面的dbname为数据库名称。 但Open函数只是验证其参数格式是否正确,实际上并不创建与数据库的连接。如果要检查数据源的名称是否真实有效,应该调用Ping方法。
只需把user,passw和dbname改成自己的即可,运行可发现
完整代码如下
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
// 定义一个全局对象db
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "user:passward@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True"
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
func main() {
err := initDB() // 调用输出化数据库的函数
if err != nil {
fmt.Printf("init db failed,err:%v\n", err)
} else {
fmt.Println("连接成功")
}
}
至此,MySQL数据库的连接操作已经成功完成。
总结
学习Go与MySQL数据库交互的过程中,我有以下一些个人感悟:
- 编程语言:Go是一种简洁、高效、安全的编程语言,它的特点是快速编译、并发性好、内存管理优秀。学习Go让我更深入地理解了编程语言的本质,也让我意识到编程语言的选择应该基于具体的任务需求和性能要求。
- 数据库:MySQL是一个功能强大、灵活、易用的关系型数据库。学习MySQL让我深入了解了关系型数据库的设计和实现原理,也让我明白如何有效地使用和管理数据库。
- 应用场景:在开发过程中,我逐渐了解到Go和MySQL在不同应用场景下的优势。Go在构建高性能、高并发的网络服务方面表现出色,而MySQL则适合处理大量数据和复杂查询。
- 团队合作:学习Go和MySQL也让我更深入地理解了团队合作的重要性。在项目中,我学会了如何与其他开发人员协作,如何有效地沟通和解决问题。
- 持续学习:编程和数据库领域的发展日新月异,持续学习是我在这个领域取得进步的关键。我意识到,只有不断学习新的技术和工具,才能保持竞争力并应对变化。
- 工具和技术:Go和MySQL都有丰富的工具和社区支持,这使得学习和使用它们变得更容易。我深刻体验到工具和技术的重要性,它们可以提高效率,减少错误,使我们的工作更加轻松。
总之,学习Go与MySQL数据库交互需要深入理解MySQL数据库的基本概念和SQL语言,熟悉Go语言的database/sql包的用法,以及掌握一些性能优化的技巧。通过不断的练习、实践和调试,我们可以提高与MySQL数据库交互的技能,并编写出高效、安全和可靠的数据库操作代码。