golang传递字符串包含"%"到http.ResponseWriter会导致变量丢失

时间:2017-10-20 03:11:35

标签: string http go

w的类型为http.ResponseWriter

这很好:

fmt.Fprintf(w, statusPercentage + " " + mostUpToDateStatusDownloaded + "/"+ mostUpToDateStatusOverallData)

输出:100 488 MB / 488 MB

这会导致问题:

fmt.Fprintf(w, statusPercentage + "% " + mostUpToDateStatusDownloaded + "/"+ mostUpToDateStatusOverallData)

输出:100%! (MISSING)MB / 488 MB

2 个答案:

答案 0 :(得分:5)

dispatch_async(dispatch_get_main_queue(), 0), ^{ // your CoreData initialize here } 是一个特殊的占位符符号。如果你想把它作为一个符号本身放入一个字符串 - 复制它。像:

%

输出:

fmt.Fprintf(w, "Growth %v %%", "50")

答案 1 :(得分:4)

使用任意应用程序字符串作为fmt.Fprintf和朋友的格式说明符通常不是一个好习惯。应用程序应使用固定格式字符串或将字符串转换为字节并将字节直接写入响应。

以下是使用格式字符串的方法:

// note that '%' is quoted as %%
fmt.Fprintf(w, "%s%% %s/%s", statusPercentage, mostUpToDateStatusDownloaded, mostUpToDateStatusOverallData)

以下是跳过格式化并直接写入响应的方法:

io.WriteString(w, statusPercentage + "% " + mostUpToDateStatusDownloaded + "/"+ mostUpToDateStatusOverallData)