Go与数据库 | 青训营

71 阅读4分钟

Go作为一种编程语言,有许多库和框架可用于简化系统级编程,常被企业作为业务语言,而业务的处理,更是离不开数据库的支持,今天来用go连接一下数据库,以MySQL为例。

驱动安装

打开Go语言的官网:golang.google.cn/
点击package

Snipaste_2023-08-04_09-36-15.png
搜索mysql,打开第一个

Snipaste_2023-08-04_09-37-02.png
点击installation

Snipaste_2023-08-04_09-38-03.png

跳转如下 Snipaste_2023-08-04_09-38-33.png
这段代码即为下载mysql驱动的代码,但如果此时我们直接在goland的终端输入这段代码会报错,是因为go get命令不再支持在不带模块的目录中使用

Snipaste_2023-08-04_09-39-50.png 所以我们先创建go.mod文件,在Go语言中,go mod init 是一个命令,用于初始化一个现有的go.mod文件。go mod init 命令会在指定的目录下创建一个新的go.mod文件,并将其内容设置为module的模块声明。 这个命令可以用于在没有安装任何包的情况下初始化一个包,或者在已经有go.mod文件的情况下更新其内容。

go mod init

打开终端,输入go mod init+项目名,

Snipaste_2023-08-04_09-42-06.png 这时会自动创建go.mod文件,创建好后再输入安装驱动的命令:

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

由于GitHub是由国外服务器代理,可能有的人执行这段命令会显示连接超时问题

Snipaste_2023-08-04_09-43-43.png
我们可以切换一下代理 :go env -w GOPROXY=goproxy.cn
再执行刚才的命令,可以看见成功下载

Snipaste_2023-08-04_09-44-51.png
至此,MySQL的驱动安装已经成功。

连接MySQL

回到刚才installation的页面,下滑可以看见usage

Snipaste_2023-08-04_09-47-10.png 测试代码如下

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方法。

Snipaste_2023-08-04_09-49-21.png 只需把user,passw和dbname改成自己的即可,运行可发现

Snipaste_2023-08-04_09-50-12.png
完整代码如下

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数据库交互的过程中,我有以下一些个人感悟:

  1. 编程语言:Go是一种简洁、高效、安全的编程语言,它的特点是快速编译、并发性好、内存管理优秀。学习Go让我更深入地理解了编程语言的本质,也让我意识到编程语言的选择应该基于具体的任务需求和性能要求。
  2. 数据库:MySQL是一个功能强大、灵活、易用的关系型数据库。学习MySQL让我深入了解了关系型数据库的设计和实现原理,也让我明白如何有效地使用和管理数据库。
  3. 应用场景:在开发过程中,我逐渐了解到Go和MySQL在不同应用场景下的优势。Go在构建高性能、高并发的网络服务方面表现出色,而MySQL则适合处理大量数据和复杂查询。
  4. 团队合作:学习Go和MySQL也让我更深入地理解了团队合作的重要性。在项目中,我学会了如何与其他开发人员协作,如何有效地沟通和解决问题。
  5. 持续学习:编程和数据库领域的发展日新月异,持续学习是我在这个领域取得进步的关键。我意识到,只有不断学习新的技术和工具,才能保持竞争力并应对变化。
  6. 工具和技术:Go和MySQL都有丰富的工具和社区支持,这使得学习和使用它们变得更容易。我深刻体验到工具和技术的重要性,它们可以提高效率,减少错误,使我们的工作更加轻松。

总之,学习Go与MySQL数据库交互需要深入理解MySQL数据库的基本概念和SQL语言,熟悉Go语言的database/sql包的用法,以及掌握一些性能优化的技巧。通过不断的练习、实践和调试,我们可以提高与MySQL数据库交互的技能,并编写出高效、安全和可靠的数据库操作代码。