Go语言之连接数据库,并判断数据库是否成功

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Go语言之连接数据库,并判断数据库是否成功

go语言中,连接数据库方式也是非常简单的,需要引用包database/sql和驱动_ "github.com/go-sql-driver/mysql"

代码实例


日常写法:

package main
import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
)
func main() {
  //用户名密码:root\123456 
  //@tcp:已tcp连接
  //(192.168.84.152:13306):数据库ip和端口号
  //sql_demo:具体数据库
  dsn := "root:123456@tcp(192.168.84.152:13306)/sql_demo"
  //open函数只能检查格式是否正确,不正确立即中断程序
  db,err := sql.Open("mysql",dsn)
  if err != nil {
    panic(err)
  }
  //最后调用关闭连接操作
  defer db.Close()
  //判断数据库是否连接成功,可使用db中的Ping参数
  err = db.Ping()
  if err != nil {
    fmt.Printf("connect to db failed,err:%v\n",err)
  }else {
    fmt.Printf("connect to db success")
  }
}

运行程序:(模拟三种场景,连接不上数据库、连接上数据库、连接不到指定数据库)

1675235207757.jpg

项目中写法:

package main
import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
  "time"
)
var db *sql.DB
func initMySQL()(err error)  {
  dsn := "root:123456@tcp(192.168.84.133:32768)/sql_demo"
  db,err = sql.Open("mysql",dsn)
  if err != nil {
    panic(err)
  }
  err = db.Ping()
  if err != nil {
    return
  }
  db.SetMaxOpenConns(200) //最大连接数
  db.SetMaxIdleConns(10) //连接池里最大空闲连接数。必须要比maxOpenConns小
  db.SetConnMaxLifetime(time.Second*10) //最大存活保持时间
  db.SetConnMaxIdleTime(time.Second*10) //最大空闲保持时间
  return
}
func main() {
  if err := initMySQL();err !=nil{
    fmt.Printf("connect to db failed,err:%v\n",err)
  }else {
    fmt.Println("connect to db success")
  }
  defer db.Close()
}
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
JSON 测试技术 Go
零值在go语言和初始化数据
【7月更文挑战第10天】本文介绍在Go语言中如何初始化数据,未初始化的变量会有对应的零值:bool为`false`,int为`0`,byte和string为空,pointer、function、interface及channel为`nil`,slice和map也为`nil`。。本文档作为指南,帮助理解Go的数据结构和正确使用它们。
52 22
零值在go语言和初始化数据
|
3天前
|
JSON Java Go
Go 语言性能优化技巧
在Go语言中优化性能涉及数字字符串转换(如用`strconv.Itoa()`代替`fmt.Sprintf()`)、避免不必要的字符串到字节切片转换、预分配切片容量、使用`strings.Builder`拼接、有效利用并发(`goroutine`和`sync.WaitGroup`)、减少内存分配、对象重用(`sync.Pool`)、无锁编程、I/O缓冲、正则预编译和选择高效的序列化方法。这些策略能显著提升代码执行效率和系统资源利用率。
39 13
|
3天前
|
设计模式 Go
Go语言设计模式:使用Option模式简化类的初始化
在Go语言中,面对构造函数参数过多导致的复杂性问题,可以采用Option模式。Option模式通过函数选项提供灵活的配置,增强了构造函数的可读性和可扩展性。以`Foo`为例,通过定义如`WithName`、`WithAge`、`WithDB`等设置器函数,调用者可以选择性地传递所需参数,避免了记忆参数顺序和类型。这种模式提升了代码的维护性和灵活性,特别是在处理多配置场景时。
40 8
|
3天前
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
18 2
|
3天前
|
存储 Go
go语言中fmt格式化包和内置函数汇总
【7月更文挑战第10天】本文介绍fmt包和`Errorf`用于创建格式化的错误消息。`fmt`包还涉及一些接口,如`Formatter`、`GoStringer`、`ScanState`、`Scanner`和`Stringer`,支持自定义格式化和输入/输出处理。
16 1
|
3天前
|
Go
go语言中格式化输出的占位符
【7月更文挑战第10天】`fmt` 包在 Go 语言中用于格式化输出,包括不同类型的占位符:%v(默认格式)、%+v(带字段名的结构体)、%#v(Go语法表示)、%T(类型表示)、%%(百分号)。布尔值用%t,整数有%b、%c、%d、%o、%q、%x、%X和%U。浮点数和复数用%b、%e、%E、%f、%g、%G。字符串和字节切片用%s、%q、%x、%X。指针用%p。占位符可配合+、-、#、空格和0进行调整。宽度和精度控制输出格式,例如 %.4g 控制小数精度。Go 没有 `%u`,但无符号整数默认打印为正数。运算符包括逻辑、比较、加减、乘除、移位、按位和按位异或等。
15 1
|
1天前
|
存储 安全 Java
Go语言中的map为什么默认不是并发安全的?
Go语言的map默认不保证并发安全,以优化性能和简洁性。官方建议在需要时使用`sync.Mutex`保证安全。从Go 1.6起,并发读写map会导致程序崩溃,鼓励开发者显式处理并发问题。这样做的哲学是让代码更清晰,并避免不必要的性能开销。
2 0
|
2天前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
13 0
|
2月前
|
开发框架 安全 中间件
Go语言开发小技巧&易错点100例(十二)
Go语言开发小技巧&易错点100例(十二)
41 1
|
23天前
|
中间件 Go
go语言后端开发学习(三)——基于validator包实现接口校验
go语言后端开发学习(三)——基于validator包实现接口校验