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

本文涉及的产品
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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()
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
8月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
392 2
|
9月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
411 13
|
9月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
1770 11
|
10月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
612 0
|
10月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
432 0
|
10月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
470 0
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
532 1
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。