Go语言如何在String中存储%3a、%a这类带%的特殊字符?
你遇到的报错是因为fmt.Sprintf的第一个入参为格式化模板,%是模板中的特殊标识,用于标记格式化动词。你直接将包含%的字符串作为模板传入时,Go会将%a、%3a这类内容识别为需要匹配入参的占位符,缺少对应参数时就会输出%!a(Missing)这类错误提示。
解决方法
硬编码场景
如果是手写的模板中需要输出%,用两个连续的%%做转义即可:
str := fmt.Sprintf("dsfsd%%a") // 最终str的值为 dsfsd%a
动态来源场景(JSON等非硬编码内容)
这种场景下不需要使用fmt.Sprintf处理原字符串,直接将解析得到的字符串赋值给变量即可,原有的%a、%3a序列会完整保留:
// 假设jsonStr是你从JSON中解析得到的字符串,值为"dsfsd%a" str := jsonStr // 直接打印、存储都不会修改原有内容
如果需要将动态字符串和其他内容拼接,推荐两种安全写法:
- 把动态字符串作为格式化参数传入,模板中用
%s占位:
prefix := "test_" dynamicStr := "dsfsd%a" // 模拟JSON解析结果 str := fmt.Sprintf("%s%s", prefix, dynamicStr)
- 直接用
+做字符串拼接,完全避开格式化函数的特殊字符解析:
str := prefix + dynamicStr
内容的提问来源于stack exchange,提问作者Sachin Bankar
相关产品推荐
相关产品推荐

