go interface{} 和string的转换问题

 1.遇到的问题

问题来源于,我sql模版拼接遇到的问题。

 首先,这样是没有问题的。

	var qhx interface{} = "qhx"s := qhx.(string)fmt.Println(s)

但是当我在这段代码里用:1.类型断言

var sqlStr = "select * from `tx_user` where username = '%s'"
jointSqlStr1(sqlStr, "admin")func jointSqlStr1(sqlStr string,args ...interface{}) string {for _,arg := range args {sqlStr = fmt.Sprintf(arg.(string)) // 类型断言}return sqlStr
}

他就会报interface{} not string这个问题 

后面我试了试,就算用 2. switch - type,也会类型匹配不到。

解放方案:

先通过 3.fmt.Spinft()函数转换为字符串,会多了 [ ]这个东西,再切除就可以了。

func jointSqlStr(sqlStr string, args ...interface{}) string {for _, arg := range args {str := fmt.Sprintf("%s", arg) // [admin]str = str[1 : len(str)-1] // adminsqlStr = fmt.Sprintf(sqlStr, str)}return sqlStr
}

后来发现: 以上都是正确的方法。

2.我的问题

我的问题在函数嵌套。怎么讲呢?

// 执行select all
func ExecuteSelectAll(stc interface{}, sql string, params ...interface{}) {sql = jointSqlStr(sql, params) // 我拿到params,直接传入joinSqlStr里面err := Db.Select(stc, sql)if err != nil {util.Log.Error("Sql Select Error:" + err.Error())return}
}func jointSqlStr(sqlStr string, args ...interface{}) string {for _, arg := range args {str := fmt.Sprintf("%s", arg) // [admin]str = str[1 : len(str)-1]     // adminsqlStr = fmt.Sprintf(sqlStr, str)}return sqlStr
}

导致拿到的类型结构是这样似的。显然这是不对的。

正确的写法,应该这样:

func ExecuteSelectAll(stc interface{}, sql string, params ...interface{}) {sql = jointSqlStr(sql, params...)// ....
}
但是,如下图: 经过Sprintf()拼接之后,如果有空余的%s没被填充,最后出现下面这种状况。
var sqlStr = "select * from tx_user WHERE username= '%s' and password = '%s'"
fmt.Sprintf(sqlStr,"admin")

因此,代码要这样改。 

func jointSqlStr(sqlStr string, args ...interface{}) string {// 以%s分割strs := strings.Split(sqlStr, "%s")if len(strs) == 0 {return sqlStr}newSql := ""for i, _ := range strs {newSql += strs[i]if i != len(strs)-1 {switch args[i].(type) {case string:newSql += args[i].(string)breakcase int:newSql += fmt.Sprintf("%v", args[i].(int))breakcase uint:newSql += fmt.Sprintf("%v", args[i].(uint))break}}}return newSql
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2808056.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第二十五天 | 216.组合总和III,17.电话号码的字母组合 [回溯篇]

代码随想录算法训练营第二十五天 LeetCode 216.组合总和III题目描述思路参考代码总结 LeetCode 17.电话号码的字母组合题目描述思路参考代码 LeetCode 216.组合总和III 题目链接:216.组合总和III 文章讲解:代码随想录#216.组合总和III 视频讲解&#xff…

opengl 学习纹理

一.纹理是什么? 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;类似于图像一样,纹理也可以被用来储存大量的数据,这些数据可以发送到着色器上。 采样是指用纹理坐标来获取纹…

医学试纸条图像处理技术

医学试纸条图像处理是一个重要的领域,它涉及到从医学试纸条上提取和分析信息的各种技术。这里是一些常见的工作步骤: 一、图像预处理:在处理任何图像之前,通常需要进行预处理步骤,以改善图像质量并准备后续分析。这可…

VH6501采样点测试误差及影响因素分析(官方文档)

📙 相关文章 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】&…

挑战杯 基于情感分析的网络舆情热点分析系统

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

解决vulhub漏洞环境下载慢卡死问题即解决docker-valhub漏洞环境下载慢的问题

解决vulhub环境下载慢/卡 当前环境为:ubuntu20 1.在 cd /etc/docker/目录下创建或修改daemon.json文件 sudo touch daemon.json编辑daemon.json文件 sudo vim daemon.json2.填写阿里云镜像地址: { "registry-mirrors":["https://6kx…

基础光学系列:(三)揭秘机器视觉中的光圈、焦距与景深的作用

​今天来聊聊成像原理、光圈、焦距和景深,这些概念在摄影、摄像以及机器视觉领域都非常重要。它们共同影响着成像设备捕捉图像的质量和特性。让我们一一解析这些概念以及它们如何在机器视觉行业中应用。 成像原理:怎样把外面的世界捕捉进来 想象一下&a…

Yolov8有效涨点:YOLOv8-AM,采用多种注意力模块提高检测精度,含代码,超详细

前言 2023 年,Ultralytics 推出了最新版本的 YOLO 模型。注意力机制是提高模型性能最热门的方法之一。 本次介绍的是YOLOv8-AM,它将注意力机制融入到原始的YOLOv8架构中。具体来说,我们分别采用四个注意力模块:卷积块注意力模块(CBAM)、全局注意力机制(GAM)、高效通道…

Buffer计算机基础fs模块path模块(day02)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈 一、Buffer 1.概念 Buffer中文译为【缓冲区】,是一个类似于Array的对象,用来表示固定长度的字节序列 简单理解&…

使用免费的L53巧解Freenom域名失效问题

进入2月份以来,不少小伙伴纷纷收到Freenom提供的域名失效,状态由正常变成了Pending。 失效后,域名无法使用,免费的午餐没有了,而现在域名的价格也是水涨船高,真是XXX。很多做外贸的小伙伴表示 难 啊&#x…

“一键焕发视频新生!炫酷色彩变幻特效,让您的创意视频大放异彩!“

在这个视频内容爆炸的时代,如何让您的视频作品脱颖而出,吸引观众的眼球?答案就是——色彩变幻特效!通过为视频添加独特的色彩变幻效果,您可以轻松赋予作品无与伦比的魅力和视觉冲击力。 首先第一步,我们要进…

QWidget: Must construct a QApplication before a QWidget 13:25:48: 程序异常结束。

QWidget: Must construct a QApplication before a QWidget 13:25:48: 程序异常结束。 你的插件是release,而你用了debug模式、

[NPUCTF2020]ezinclude ---不会编程的崽

做完这题,又get到一个新的知识点。上界面 源代码里有线索 secret是秘密值,name与pass应该是可以控制的变量。抓个包看看 发送与请求有hash值,没猜错应该是用来验证的。拿去爆破了,啥也没爆破出来。先传参 右边的hash值改变了。猜想…

注解开发总结

目录 注解开发定义bean纯注解开发bean作用范围与生命周期依赖注入——自动装配第三方 bean第三方 bean 管理第三方 bean 依赖注入 XML配置比对注解配置 注解开发定义bean 使用 Component 定义 bean , 括号里面可以认为是 id Component("bookDao") publi…

MATLAB环境下基于图像处理的视网膜图像血管分割

预防糖尿病对每个人的健康至关重要,而糖尿病的早期症状在眼底视网膜血管会有所体现,如静脉血管扩张、轻度弯曲等。高血压作为常见疾病,在中国有多达2.45亿的患者。高血压的病情也会在眼底视网膜血管上有所体现,如交叉压迫征等反映…

Spring篇----第四篇

系列文章目录 文章目录 系列文章目录前言一、区分构造函数注入和 setter 注入二、spring 中有多少种 IOC 容器?三、区分 BeanFactory 和 ApplicationContext。四、列举 IoC 的一些好处。前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大…

Stable Diffusion 3重磅发布

刚不久,Stability AI发布了Stable Diffusion 3.0,这一版本采用了与备受瞩目的爆火Sora相同的DiT架构。通过这一更新,画面质量、文字渲染以及对复杂对象的理解能力都得到了显著提升。由于这些改进,先前的技术Midjourney和DALL-E 3在…

金融知识分享系列之:五日线

金融知识分享系列之:五日线 一、股票均线二、五日线三、五日线加量能三、五日线案例四、五日线案例五、五日线案例六、五日线案例七、五日线案例八、五日线案例 一、股票均线 股票均线是一种用于平滑股票价格的指标。它是根据一段时间内的股票价格计算得出的平均值…

定时任务处理-Spring Task

目录 1 前言 2 cron表达式 2.1 相关概念的介绍 2.2 举个例子(白雪警告) 2.3 使用网站自动生成 3 Spring Task的使用 3.1 导入依赖坐标 3.2 开启任务调度 3.3 自定义定时任务类 1 前言 当我们需要处理一些定时任务的时候就需要用到我们的Spring Task,接下来…

使用命令符用cd切换不了

bug:cd 切换不进去 解决办法: 在cd后面加 /d