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
}
相关文章:
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" join…...
【Git教程】(三)提交详解 —— add、commit、status、stach命令的说明,提交散列值与历史,多次提交及忽略 ~
Git教程 提交详解 1️⃣ 访问权限与时间戳2️⃣ add命令与 commit 命令3️⃣ 提交散列值4️⃣ 提交历史5️⃣ 一种特别的提交查看方法6️⃣ 同一项目的多部不同历史6.1 部分输出:-n6.2 格式化输出:--format、--oneline6.3 统计修改信息:--st…...
vue3个人网站电子宠物
预览 具体代码 Attack.gif Attacked.gif Static.gif Walk.gif Attack.gif Static.gif Attacked.gif Walk.gif <template><div class"pet-container" ref"petContainer"><p class"pet-msg">{{ pet.msg }}</p><img re…...
2.22 作业
顺序表 运行结果 fun.c #include "fun.h" seq_p create_seq_list() {seq_p L (seq_p)malloc(sizeof(seq_list));if(LNULL){printf("空间申请失败\n");return NULL;}L->len 0; bzero(L,sizeof(L->data)); return L; } int seq_empty(seq_p L) {i…...
office word保存pdf高质量设置
1 采用第三方pdf功能生成 分辨率越大质量越好...
微服务设计模式
微服务在过去十年中已经发展到现在非常成熟的水平。许多模式被演变以适应不同的需求。 架构模式 分层图案 2层三层n层客户端服务器 一个服务器和多个客户端大多数在线应用程序,例如电子邮件、银行应用程序等。分开演示 模型-视图-控制器 (MVC) 模型——包含核心功能和数据查看…...
10.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏发送数据的操作
内容参考于:易道云信息技术研究院VIP课 上一个内容:接管游戏连接服务器的操作 码云地址(master 分支):染指/titan 码云版本号:00820853d5492fa7b6e32407d46b5f9c01930ec6 代码下载地址,在 ti…...
将SU模型导入ARCGIS,并获取高度信息,多面体转SHP文件(ARCMAP)
问题:将Sketchup中导出的su模型,导入arcgis并得到面shp文件,进而获取各建筑的高度、面积等信息。 思路: (1)导入arcgis得到多面体 (2)转为面shp文件 (3)计算高度/面积等 1、【3D Analyst工具】【转换】【由文件转出】【导入3D文件】(在此步骤之间,建议先建立一个…...
【电子通识】为什么单片机芯片上会有多组VDD电源?
在单片机芯片规格书中,我们经常能看到多个组VDD的设计,如下红框所示管脚都是VDD管脚。 为什么需要这样设计?只设置一个VDD管脚,把其他的VDD管脚让出来多做几个IO或是其他复用功能不好吗?接下来我们从单片机内部的电路结…...
跟我学C++中级篇——单实例和静态化
一、单实例模式 在设计模式中,单实例模式几乎是所有语言中都非常常用的一种设计模式。它在实际的应用中也非常广泛,在很多的开源框架中,都可以看到单实例的影子。单实例,简单的就可以看做在整个应用周期中,只有一个对…...
下载 axios.js 文件到本地【linux】
方式一 npm install axios在$NODE_PATH/node_modules/axios/dist路径下即可找到axios.js。 方式二 1、百度搜索 GitHub 官网:https://github.com/ 2、搜索 axios 3、点击 axios/axios 4、下载到本地 5、解压,进入到 dist 文件夹** 参考&#x…...
一些matlab的常用用法。在MATLAB中,如何实现数据的导入和导出?
一些matlab的常用用法。 MATLAB(Matrix Laboratory)是一款广泛使用的数值计算环境和编程语言,主要用于算法开发、数据可视化、数据分析以及数值计算等。以下是一些MATLAB的常用用法: 创建矩阵: 使用方括号 [] 创建矩阵…...
数学建模【插值与拟合】
一、插值与拟合简介 在数学建模过程中,通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式,针对此情况,很自然的想法就是,构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这…...
汽修专用产品---选型介绍 汽修示波器 汽车示波器 汽车电子 汽修波形 汽车传感器波形 汽车检测
为了满足汽车电子用户的测量需求,我司特推出汽修专用版示波器,一键测量,轻松找出汽车问题。 LOTO各种型号的示波器其实都可以用作汽车传感器信号波形的检测。汽修应用中,工程师对示波器的性能要求对于LOTO产品来说不算高。 在我们…...
如何将简历项目部署到自己的域名下
通过上一篇文章我们得知如何在Github上Fork项目到自己账号下,还有学会配置好简历项目并部署上线,接下来我们就来看一下该项目是如何部署到自己的域名下的 👇 在项目文档中可以看到该简历项目是部署在Vercel上的,首先打开Vercel的官…...
Redisson - 实现Java的Redis分布式和可扩展解决方案
Redisson - 实现Java的Redis分布式和可扩展解决方案 引言: 在现代的分布式系统中,缓存和数据存储扮演着至关重要的角色。Redis作为一种高性能的键值存储数据库,被广泛用于缓存、消息队列、实时数据分析等场景。然而,原生的Redis…...
如何利用EXCEL批量插入图片
目录 1.excel打开目标表格; 2.点开视图-宏-录制宏,可以改宏的名字或者选择默认; 3.然后点开视图-宏-查看宏 4.点编辑进去 5.修改代码: (1)打开之后会显示有一堆代码 (2)将这个…...
django rest framework 学习笔记-实战商城3
01用户模块模型定义_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 用户模块及商品数据表结构设计 from ckeditor.fields import RichTextField # pip install django-ckeditor from django.db import models# Create your models here. # from wx.richtext import Ri…...
WPF真入门教程29--MVVM常用框架之MvvmLight
1、MVVM模式回顾 关于mvvm模式的基础知识,请看这2个文章: WPF真入门教程23--MVVM简单介绍 WPF真入门教程24--MVVM模式Command命令 做过VUE开发或微信小程序开发的伙伴,就知道MVVM模式,核心就是数据驱动控件,全栈开…...
QT-Day4
思维导图 作业: 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMessageBox> #include <QTimerEvent>//定时器事件类 #include <QTime> #include <QDebug> #include <QPushButton> #include <QT…...
数字音频合成技术:从基础波形到嵌入式实现
1. 数字音频合成技术概述数字音频合成技术通过算法生成声音波形,是现代电子音乐制作、移动设备音效和游戏音频的核心技术。与采样回放不同,合成技术从数学原理出发构建声音,具有内存占用小、参数可自由调节的优势。典型的合成器架构包含三个核…...
保姆级教程:在Ubuntu 18.04上为Firefly RK3399 ProC交叉编译Python 3.7.10(含zlib、numpy、pyserial)
嵌入式开发实战:为Firefly RK3399 ProC构建定制Python 3.7环境 当你在Firefly RK3399 ProC开发板上尝试运行Python科学计算脚本时,是否遇到过性能瓶颈或依赖缺失的困扰?不同于x86平台的即装即用,ARM架构的嵌入式设备往往需要从源码…...
3分钟解锁QQ音乐加密格式:qmcdump音频解密终极指南
3分钟解锁QQ音乐加密格式:qmcdump音频解密终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾…...
别再乱买随身WiFi了!手把手教你用手机App(Cellular-Z)查清本地运营商频段,精准避坑
手机秒变信号探测器:3步教你用Cellular-Z避开随身WiFi选购雷区 每次看到电商平台上那些标榜"全网通"的随身WiFi设备,总忍不住想问:它们真的能在你家客厅稳定上网吗?去年我表弟就踩过这个坑——花500多买的"全频段支…...
告别浏览器插件!用Selenium+mitmproxy抓取动态网页数据的保姆级配置流程
告别浏览器插件!用Seleniummitmproxy抓取动态网页数据的保姆级配置流程 在数据驱动的时代,动态网页数据抓取已成为开发者必备技能。传统方法依赖浏览器插件或手动配置,不仅效率低下,还面临兼容性问题。本文将介绍如何通过Selenium…...
混合系统建模:离散与连续动态的融合与应用
1. 混合系统基础概念解析混合系统(Hybrid Systems)是同时包含离散和连续动态行为的数学模型,在信息物理系统(CPS)建模中具有核心地位。这类系统通过有限状态机描述离散的模式切换,用微分方程刻画连续状态演…...
2026多账号运营指纹冲突溯源与底层参数一致性治理方案
2026 年多账号规模化运营场景下,指纹冲突已经成为账号关联、环境异常的核心诱因之一。所谓指纹冲突,是指指纹环境的底层参数之间、参数与网络环境之间、参数与运行场景之间出现逻辑矛盾或数据重复,导致平台风控识别出环境异常,进而…...
Flutter桌面端:解锁原生渲染性能的Native窗口融合方案
1. 为什么需要Native窗口融合方案? 用Flutter开发桌面端应用时,视频渲染一直是个头疼的问题。我做过不少Flutter视频项目,最开始用Texture方案,发现性能总差那么一口气;后来改用CustomPainter,结果格式兼容…...
Argo CD 实战:从零构建你的第一个 GitOps 应用
1. 为什么你需要Argo CD? 如果你正在管理Kubernetes应用,肯定遇到过这样的场景:每次代码变更后,都要手动执行kubectl apply来更新集群状态。这种操作不仅容易出错,还很难追踪谁在什么时候改了什么东西。我在实际项目中…...
告别UDP丢包!手把手教你用NIOS软核在FPGA上实现稳定TCP通信(附完整工程代码)
FPGA实战:基于NIOS II软核的高性能TCP通信架构设计与优化 在工业自动化、医疗影像传输和实时数据采集等领域,FPGA与上位机的稳定通信一直是开发者面临的挑战。传统UDP方案虽然实现简单,但数据丢失和乱序问题常常导致系统可靠性下降。本文将分…...
