什么情况下会产生?
var hourPaidSuccessFenzi = decimal.NewFromFloat(10)
var alertName = fmt.Sprintf("支付成功率报警,汇总支付成功率低于%s%", hourPaidSuccessFenzi.String()),
fmt.Println(alertName)
运行结果就会成为:
支付成功率报警,汇总支付成功率低于10%!(NOVERB)
为啥会这样呢?
是因为% 是字符串参与转义的标志符,如 %s, %v, %d等。。。
%!(NOVERB) 的出现是GO语言的一种安全转义机制,怎样避免这样的情况?
// 用双百分号 %% 代替无意义的单百分 % 如:
var hourPaidSuccessFenzi = decimal.NewFromFloat(10)
var alertName = fmt.Sprintf("支付成功率报警,汇总支付成功率低于%s%%", hourPaidSuccessFenzi.String()),
fmt.Println(alertName)
最终运行结果为:
支付成功率报警,汇总支付成功率低于10%