0%

go 字符串包含 % 导致fmt.Sprintf的missing错误

出现错误'%!s(MISSING)
是调用fmt.Sprintf时出了错,字符串中包含了%

原因

原因很简单,调用fmt.Sprintf时,未做任何处理
由于业务中%是允许的,会被Go误以为占位符,导致问题出现

解决方法

由于不使用转义,所以在调用fmt.Sprintf前,多一次处理即可

1
template = strings.Replace(template, "%", "%%", -1)

将单个的%转换为%%,而%%又会被当做字面%打印,避免问题出现

原文链接