【巧妙】GO + MySQL的通用查询方法

Burp Suite扫描配置与Golang高频考点实战解析 Web安全测试与后端开发是当前IT领域的两大核心技能方向。在安全测试中,漏洞扫描是评估应用安全性的基础环节,其核心在于通过主动与被动扫描相结合的方式,精准识别SQL注入、XSS等常见漏洞。而在后端开发领域,Golang凭借其高并发模型和简洁语法,成为构建高性能云原生应用的首选语言之一。理解其切片底层数组、并发安全Map、Channel通信机制等核心原理,对于编写健壮、高效的代码至关重要。本文聚焦于Burp Suite的扫描范围配置、主动/被动扫描策略,以及Golang刷题中遇到的切片陷阱、并发编程等高频考点 阅读详情

 

GO语言与MySQL的结合还是比较容易的,像是连接,增、删、改这些操作都比较简单,唯独在查询的时候感觉比较坑(见代码),下面是官方推荐的标准查询方式:

var id int
var name string
var address string
rows, err := DB.Query("select id,name,address from users")
if err != nil {
   fmt.Println(err)
}
for rows.Next() {
   rows.Scan(&id, &name, &address)
   fmt.Println(id, name, address)
}
defer rows.Close()

这种正统的方法在执行SQL语句后,还需要通过rows.Scan()逐行读出数据,最关键的是还需要与咱的SQL语句配合好,语句里面查询了几个列,Scan这边就必须相应地用同样的独立变量与之一 一对应,否则就会报错。

查询功能是数据库应用中用得最频繁的,各种不同的表,列的数量和列名千差万别,按照上面这种查询模式,那么每一种查询那都得要重新写一个读取函数,感觉这非常浪费时间,因此,一种通用的可变列名和列数的查询方法就显得非常重要了。

以下是完整代码(我做了详细注释,很容易明白):

package mysql_con

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

var DB *sql.DB

func initDB() bool { //连接到MySQL
	path := "root:password@tcp(127.0.0.1:3306)/mydb?charset=utf8"
    //root = 用户名
    //password = 密码
    //mydb = 数据库名称

	fmt.Println(path)
	DB, _ = sql.Open("mysql", path)
	DB.SetConnMaxLifetime(100)
	DB.SetMaxIdleConns(10)
	//验证连接
	if err := DB.Ping(); err != nil {
		return false
	}
	return true
}

func Exec(SQL string) {
	if initDB() == true {
		ret, _ := DB.Exec(SQL) //增、删、改就靠这一条命令就够了,很简单
		insID, _ := ret.LastInsertId()
		fmt.Println(insID)
	}
}

func Query(SQL string) ([]map[string]string, bool) { //通用查询寒素
	if initDB() != true { //连接数据库
		return nil, false
	}
	rows, err := DB.Query(SQL) //执行SQL语句,比如select * from users
	if err != nil {
		panic(err)
	}
	columns, _ := rows.Columns()            //获取列的信息
	count := len(columns)                   //列的数量
	var values = make([]interface{}, count) //创建一个与列的数量相当的空接口
	for i, _ := range values {
		var ii interface{} //为空接口分配内存
		values[i] = &ii    //取得这些内存的指针,因后继的Scan函数只接受指针
	}
	ret := make([]map[string]string, 0) //创建返回值:不定长的map类型切片
	for rows.Next() {
		err := rows.Scan(values...)  //开始读行,Scan函数只接受指针变量
		m := make(map[string]string) //用于存放1列的 [键/值] 对
		if err != nil {
			panic(err)
		}
		for i, colName := range columns {
			var raw_value = *(values[i].(*interface{})) //读出raw数据,类型为byte
			b, _ := raw_value.([]byte)
			v := string(b) //将raw数据转换成字符串
			m[colName] = v //colName是键,v是值
		}
		ret = append(ret, m) //将单行所有列的键值对附加在总的返回值上(以行为单位)
	}
    
    defer rows.Close()

	if len(ret) != 0 {
		return ret, true
	}
	return nil, false
}

至此我们的通用Query查询函数就大功告成了,这个函数在使用起来也比较简单:

	rst, ok := mysql_con.Query("select * from users where id = 1") 
//rst是返回的记录集,ok表示是否查询成功,也可以用来判断是不是空查询
	if ok {
		fmt.Println(rst[0]["name"])
	} else {
		fmt.Println("没有找到数据")
	}

使用的时候就用rst[行] ["列名"]来读取数据即可,一个函数可以对付所有的场景,感觉非常巧妙!

PS:本文参阅了以下文章,并进行了一些小的改动:

https://stackoverflow.com/questions/17845619/how-to-call-the-scan-variadic-function-using-reflection

 

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC 阅读详情

相关推荐

HexView 脚本自动化工具:从刷写文件处理到批量转换实战

本文详细介绍了如何利用HexView脚本自动化工具高效处理嵌入式刷写文件。通过实战演示,文章展示了如何使用bat脚本实现S19、HEX等格式文件的剪切、填充、合并与批量转换,构建自动化流水线,从而显著提升汽车电子等领域的开发与生产效率。

weixin_29237635的博客 350

【Go Web学习笔记】第五章 Go操作MySQL数据库

前言:大家好,以下所有内容都是我学习韩茹老师的教程时所整理的笔记。部分内容有过删改, 推荐大家去看原作者的文档进行学习, 本文章仅作为个人的学习笔记,后续还会在此基础上不断修改。学习Go Web时应该已经熟悉Go语言基本语法以及计算机网络的相关内容。 学习链接:https://www.chaindesk.cn/witbook/17/253 参考书籍:《Go Web编程实战派》 第五章、Go操作MySQL数据库 使用MySQL数据库 目前Internet上流行的网站构架方式是LAMP,其中的 M 即 M.

ClimberCoding 1641

XianYuAutoDeliveryX:基于闲鱼API与大模型的智能自动发货系统实践

本文详细介绍了如何利用XianYuAutoDeliveryX系统,结合闲鱼API与大语言模型,构建一个智能自动发货解决方案。该系统能实现买家付款后秒级自动发货,并通过对接ChatGPT等大模型智能回复买家咨询,有效解放卖家时间,提升虚拟商品店铺的运营效率和客户体验。

bush的博客 988

Go学习(四):golang连接mysql数据库查询数据库信息

【代码】Go学习(四):golang连接mysql数据库查询数据库信息。

Lay_XZ的博客 3599

【ComfyUI】SDXL + 单LoRA 房屋平面图渲染装修

本文介绍了一种基于ComfyUI的室内平面设计图自动生成效果图的工作流。该流程通过导入房屋平面图,结合SDXL室内设计模型与北欧风格LoRA模块,快速生成多房间效果展示。工作流包含图像输入、文本处理、模型加载和图像生成等环节,支持风格化渲染和细节补充,适用于建筑设计、家装展示、房地产营销等场景。核心采用SDXL通用室内设计模型和北欧极简LoRA,通过节点衔接实现自动化批量生成,能在短时间内将平面方案转化为逼真的三维效果图。该技术可提升设计呈现效率,辅助客户决策,并应用于教学研究领域。

Mr数据杨 3604

OpenCV计算机视觉实战(12)——图像金字塔与特征缩放

图像金字塔技术通过对原始图像按不同分辨率进行多层次表示,不仅能提升计算效率,还能为图像融合、检测与识别提供多尺度特征。高斯金字塔 (Gaussian Pyramid) 用于构建多级低通图像,拉普拉斯金字塔 (Laplacian Pyramid) 则提取各层之间的细节信息。本节将深入介绍如何使用 OpenCV 构建高斯与拉普拉斯金字塔,并以经典的图像融合案例,展示图像金字塔在特征缩放与融合中的强大应用。

qq_30167691的博客 1400

golang sqlite3 一个关于defer rows.Close() 执行顺序的重要细节

//exist same row,return sql := `SELECT * FROM Deal where code=? and deal_num=?` rows, err := c.db.Query(sql, d.Code, d.DealNum) checkErr(err) var cnt = 0 defer rows.Close() fmt.Printl...

Dreamfine的专栏 1394

YOLO26 电子产品零部件质检:缺陷检测 + Streamlit

YOLO26s 电子质检链路:1100 张工业零部件图 (4 类缺陷) → 增强 (blur+shear+低光照) → 150 epoch → mAP@0.5=0.91 → Streamlit 质检界面 (上传/摄像头双模式) → 缺陷严重度分级 (pass/minor/major/critical)。核心贡献:blur+shear 模拟产线振动和视角偏移, 使模糊场景 recall 从 72% 提升至 78%;Streamlit 一键部署, 无需前端经验。建议先收集 200 张纯正常件做负样本防过检;

m0_71589036的博客 369

defer rows.Close()

lmy_loveF的博客 481

吊打原版YOLOv8!ASF-YOLO多尺度融合+注意力机制实战解析(遥感/医疗/质检均适用)

ASF-YOLO融合YOLOv8的创新目标检测框架摘要 ASF-YOLO是针对小目标检测优化的先进框架,采用三重特征编码器和尺度序列融合技术增强多尺度特征提取能力。核心创新包括: 三重特征编码器(TPE)融合跨层级信息 尺度序列特征融合(SSFF)模块通过3D卷积处理多尺度信息 通道-位置注意力机制(CPAM)聚焦关键特征区域 Zoom_cat模块实现自适应多尺度特征融合 该框架特别适用于医学影像、遥感检测等小目标密集场景,通过动态特征权重调整显著提升检测精度。关键技术实现包含多尺度特征统一、3D卷积序列处

FJN110的博客 521

提升YOLOv8检测精度的边界框损失函数Focaler-IoU与InnerFocalerIoU的应用与效果

YOLOv8是一种常用的实时目标检测模型,基于CNN(卷积神经网络)结构并结合了一些改进技术以提高检测精度和速度。YOLOv8的核心在于边界框的预测和分类,而准确的边界框预测是提高模型整体性能的关键因素之一。在传统的IoU损失基础上,Focaler-IoU和InnerFocalerIoU进一步聚焦于边界框的边缘区域,通过调整损失权重,更好地关注难以检测的边界框,提高模型的鲁棒性和准确性。# 计算IoU# 计算Focaler-IoU损失在这里,我们定义了。

博客 1333

GO操作MYSQL

驱动包 MySql驱动 Go语言中的database/sql包不包含数据库驱动,使用时必须注入一个数据库驱动。 下载依赖 go get -u github.com/go-sql-driver/mysql 使用mysql驱动 语法: func Open(driverName, dataSourceName string) (*DB, error) 示例代码: impor...

aiduo4911的博客 417

RGB渐变颜色转换公式及例程

设Step=51,将RGB(255,0,0)颜色渐变为RGB(0,255,0),即RGB(255,0,0)经过51次颜色渐变转为RGB(0,255,0);设Step=51,将RGB(0,255,0)颜色渐变为RGB(0,0,255),即RGB(0,255,0)经过51次颜色渐变转为RGB(0,0,255);设Step=51,将RGB(0,0,255)颜色渐变为RGB(255,0,0),即RGB(0,0,255)经过51次颜色渐变转为RGB(255,0,0);分步骤的方式,使其渐变色循环整个颜色值;

1万+

go语言 实现mysql协议_Go语言实现MySQL连接

Go语言实现MySQL连接字号+编辑: 呆头鹅甲 修订: 呆头鹅甲 2015-02-07 11:52:14用代码举例说明Go语言实现MySQL连接的方法。packagemainimport("crypto/md5""database/sql""encoding/hex""fmt"//新手都会被这个_所迷惑,其实这个就是Go设计的巧妙之处,//我们在变量赋值的时候经常看到这个符号,它是用来忽...

weixin_42298254的博客 548

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

b站golang后端开发一面

Golang(也称为Go语言)是一种静态类型、编译型语言,由Google开发,以其简洁、高效和强大的并发处理能力著称。Golang的设计哲学强调简洁明了。与Python类似,Go语法简洁,易于学习和编写。但与Python等动态类型语言不同,Go是静态类型语言,这意味着在编译时就能捕捉到更多的错误,从而提高代码的稳定性和可维护性。Golang的一个显著特点是其对并发的原生支持。通过goroutine和channel,Golang使得并发编程变得简单而强大。

weixin_54385104的博客 1295

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mayfly-go统一运维平台架构深度解析:Golang + Vue3全栈技术实现

在当今企业数字化转型的浪潮中,运维管理平台面临着前所未有的挑战:多类型数据库管理、服务器运维、容器编排等需求日益复杂,传统的手动操作和分散的管理工具已无法满足现代企业的运维需求。mayfly-go作为一款基于Golang和Vue3构建的Web版统一管理操作平台,通过创新的技术架构设计,为开发者和运维团队提供了集Linux终端、数据库管理、Redis、MongoDB、Elasticsearch等多种

gitblog_00652的博客 387

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

go 实现mysql_go实现mysql连接

package mainimport ("crypto/md5""database/sql""encoding/hex""fmt"// 新手都会被这个_所迷惑,其实这个就是Go设计的巧妙之处,我们在变量赋值的时候经常看到这个符号,它是用来忽略变量赋值的占位符,那么包引入用到这个符号也是相似的作用,这儿使用_的意思是引入后面的包名而不直接使用这个包中定义的函数,变量等资源。_ "github.com...

weixin_39801465的博客 167

解决90%的MySQL连接问题:Go-MySQL-Driver智能重试机制详解

Go-MySQL-Driver(项目路径:GitHub_Trending/mys/mysql)作为Go语言生态中最流行的MySQL驱动之一,其内置的智能重试机制能有效解决90%以上的数据库连接问题。本文将深入解析驱动如何通过`ErrBadConn`错误处理、连接状态检测和安全重试策略,帮助开发者构建高可用的数据库应用。 ## 为什么连接重试对MySQL至关重要 🚀 在分布式系统中,数据库连接

gitblog_00272的博客 503

go mysql init_Go使用MySQL数据库

连接数据库package mainimport ("context""database/sql""fmt""log"_ "github.com/mikespook/mymysql")func main() {var db *sql.DB// 第二个参数的格式为:user:password@tcp(ip: port)/dbnamedb, _ = sql.Open("mysql", "******")...

weixin_35627928的博客 333

Go-MySQL Canal实战:从MySQL到Elasticsearch的完整数据管道

Go-MySQL Canal是一个基于Go语言开发的强大MySQL数据同步工具,它能够将MySQL的数据实时同步到各种目标系统,包括Elasticsearch、Redis等。如果你正在寻找一个高效、可靠的MySQL数据同步解决方案,那么Go-MySQL Canal绝对是你的最佳选择!🚀 ## 为什么选择Go-MySQL Canal? Go-MySQL Canal采用**增量数据同步**的方式

gitblog_01044的博客 319

Golang连接池的几种实现案例

因为TCP的三次握手等等原因,建立一个连接是一件成本比较高的行为。所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用。而维持一个连接池,最基本的要求就是要做到:thread safe(线程安全),尤其是在Golang这种特性是goroutine的语言中。实现简单的连接池type Pool struct { m sync.Mutex //保证多个...

Seekload 1628

推荐文章:探索MySQL新境界 —— 深入了解go-mysqlstack

推荐文章:探索MySQL新境界 —— 深入了解go-mysqlstack 在今天的软件开发领域中,数据库的高效处理是任何应用成功的关键。对于那些热衷于利用Go语言简洁性与高性能的开发者来说,go-mysqlstack无疑是一个不容错过的名字。本文旨在带你深入了解这一强大的MySQL协议库,揭示其技术魅力,应用场景以及独特的特性,激发你将之应用于你的下一个项目中的欲望。 项目介绍 go-mysqls...

gitblog_01070的博客 352

npiperelay源码解析:深入理解Go语言Windows系统调用实现

npiperelay是一个基于Go语言开发的工具,它允许从Windows Subsystem for Linux (WSL)环境中访问Windows命名管道,通过Go语言的系统调用实现跨系统通信。本文将深入分析npiperelay的核心实现,揭示Go语言如何与Windows系统API交互,以及命名管道通信的关键技术细节。 ## 项目结构与核心文件 npiperelay项目采用简洁的目录结构,主

gitblog_00257的博客 511

Go-Queryset代码生成揭秘:从注释到完整QuerySet的完整流程

Go-Queryset是一个为Go语言打造的100%类型安全ORM工具,它通过代码生成机制,在GORM基础上提供了更强大的类型检查和开发体验。本文将带你深入了解Go-Queryset的代码生成流程,从简单的注释指令到最终生成完整的QuerySet实现,揭开这个强大工具背后的神秘面纱。 ## 一、代码生成的触发点://go:generate指令 Go-Queryset的代码生成流程始于Go语言原

gitblog_00725的博客 647

关于golang database_sql 包

golang中的标准库database/sql 包为SQL和类SQL数据库的操作提供了通用的接口。 database/sql 包 必须与数据库driver 配套使用。 目前已有的SQL database drivers 见链接。 这里面就包括比较常用的MySQL driver go-sql-driver/mysql 。 database/sql 包的设计可以说是很巧妙。 它对于上层应用提供了标准的API接口,对下层驱动driver暴露了简单的驱动接口。 并且实现了连接池的管理。这意味着,不同数据库的驱动只需

翔云 1043

Golang版本的苍穹外卖

JAVA苍穹外卖的Golang实现版本,一学一个准Offer匡匡拿。

qq_42168763的博客 527
上一篇: [亲测] 私有云盘Nextcloud在nginx环境下安装(全流程)
下一篇: 2020-01-04 Git命令
rockage
博客等级 码龄19年 301粉丝 92原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rockage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值