首页 > 数据库 >如何使用Go语言连接和操作数据库?

如何使用Go语言连接和操作数据库?

时间:2024-06-07 22:28:47浏览次数:32  
标签:log err 数据库 db sql Go Fatal 连接

文章目录



在Go语言中,连接和操作数据库通常使用database/sql包,它提供了一个数据库抽象层,支持多种数据库引擎,如MySQL、PostgreSQL、SQLite等。下面我将以MySQL为例,详细讲解如何使用Go语言连接和操作数据库。

1. 安装MySQL驱动

首先,你需要安装一个MySQL驱动,以便能够与MySQL数据库进行通信。推荐使用github.com/go-sql-driver/mysql,可以通过以下命令安装:

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

2. 连接数据库

使用sql.Open函数建立与MySQL数据库的连接。该函数接受两个参数:数据库驱动名称和连接字符串。连接字符串包含了连接数据库所需的所有信息,如用户名、密码、主机名、端口和数据库名等。

示例代码:

package main

import (
 "database/sql"
 "fmt"
 "log"

 _ "github.com/go-sql-driver/mysql"
)

func main() {
 // 定义连接字符串
 db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
 if err != nil {
 log.Fatal(err)
 }
 defer db.Close()

 // 验证连接
 err = db.Ping()
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("Connected to database successfully!")
}

3. 执行查询

使用db.Query方法执行SQL查询,并获取*sql.Rows结果集。你可以使用rows.Next()方法遍历结果集,并使用rows.Scan()方法将每行数据扫描到变量中。

示例代码:

package main

import (
 "database/sql"
 "fmt"
 "log"

 _ "github.com/go-sql-driver/mysql"
)

func main() {
 // 连接数据库
 db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
 if err != nil {
 log.Fatal(err)
 }
 defer db.Close()

 // 执行查询
 rows, err := db.Query("SELECT id, name FROM users")
 if err != nil {
 log.Fatal(err)
 }
 defer rows.Close()

 // 遍历结果集
 for rows.Next() {
 var id int
 var name string
 err := rows.Scan(&id, &name)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Printf("ID: %d, Name: %s\n", id, name)
 }

 // 检查遍历过程中是否出现错误
 if err := rows.Err(); err != nil {
 log.Fatal(err)
 }
}

4. 执行插入、更新和删除操作

使用db.Exec方法执行SQL语句,如插入、更新和删除操作。db.Exec方法返回一个sql.Result对象,你可以使用它来获取受影响的行数。

示例代码:

package main

import (
 "database/sql"
 "fmt"
 "log"

 _ "github.com/go-sql-driver/mysql"
)

func main() {
 // 连接数据库
 db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
 if err != nil {
 log.Fatal(err)
 }
 defer db.Close()

 // 插入数据
 _, err = db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "Alice", 25)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("Data inserted successfully!")

 // 更新数据
 _, err = db.Exec("UPDATE users SET age = ? WHERE id = ?", 30, 1)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("Data updated successfully!")

 // 删除数据
 _, err = db.Exec("DELETE FROM users WHERE id = ?", 1)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("Data deleted successfully!")
}

以上是使用Go语言连接和操作MySQL数据库的基本步骤。



推荐阅读

Go Tutorial

标签:log,err,数据库,db,sql,Go,Fatal,连接
From: https://blog.csdn.net/zingsono/article/details/139470094

相关文章

  • 成为MySQL DBA后,再看ORACLE数据库(七、日志体系)
    说起数据库的日志,一般有redo日志、归档日志、错误日志、审计日志等,不同的数据库为了满足其特定的功能会有不同类型的日志。在ORACLE的日常运维中,可能接触得最多的就是redo日志、归档日志、告警日志、闪回日志这几种日志。在ORACLE知识体系中,一般把redo、undo、checkpoint这几个知......
  • Django 里的表格内容做修改
    当Django里表格内容需要做修改,可以这么操作。先看效果图修改后的表格1.先得在asset_list.html里修改。你们的html有可能跟我不一样<tableborder="1px"><thead><tr><th>ID</th><th>标题</th><th>价格......
  • Django 里实现表格内容上传
    先看效果图:当没有添加数据,就按提交键就会出现报错下面是操作步骤1.先在views.py文件里做添加#在views.pyclassAssetModelForm(forms.ModelForm):#newField=forms.CharField()classMeta:model=models.AssetSetfields=......
  • Django获取 verbose_name 显示到前端
    在models.py文件里,创建各个数据表models#在models.py文件里classAssetSet(models.Model):"""资产表"""name=models.CharField(verbose_name="名称",max_length=32)price=models.IntegerField(verbose_name=&quo......
  • vue 连接mqtt
    下载mqtt服务:npminstallmqttconstmqttConfig={//你的MQTT服务器配置protocolId:'MQTT',protocolVersion:4,clean:true,clientId:'xxxx',reconnectPeriod:1000,connectTimeout:60*1000,//will:{//topic:�......
  • 使用jasypt 和 k8s 避免项目中写数据库连接密码
    0引入jasypt<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></de......
  • 关于正在开发中的DjangoStarter v3版本
    前言最近做的这个项目大量使用了python及其相关的生态,因此自然而然选择了我的DjangoStarter作为后端框架之前v2版本是用RestFramework做接口的,后面我试用了一次django-ninja之后就喜欢这种类似FastApi的写接口方式正所谓天下苦drf久矣,在新的v3版本框架中,我决定......
  • 原生html+js实现两两元素配对,用线条连接两个元素
    效果如下:画线部分借鉴了“https://blogweb.cn/article/1403842582411”此链接文章作者的代码,感谢!直接放出代码:点击查看代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>配对</title><scripttype=&qu......
  • mysql8 无法连接navicat问题
    1、修改MySQL的配置文件(my.cnf或者my.ini),在[mysqld]部分添加或者修改default_authentication_plugin=mysql_native_password。重启mysql服务2、创建或修改用户并设置密码:如果您还没有 root 用户从任何主机连接的权限,您需要首先以具有足够权限的用户(通常是本地 root 用户)登录......
  • Golang递归实现菜单分类
    packagemainimport( "fmt")//Menu菜单typeMenustruct{IDintParentIDintNamestringChildren[]Menu}//TreeList菜单typeTreeListstruct{IDintParentIDintNamestringChildren[]TreeList}//For......