"具有动态格式字符串且没有进一步参数的 printf 样式函数应改用打印样式函数"是什么意思?



具有动态格式字符串且没有其他参数的printf样式函数应使用打印样式函数代替

我的VScode不断突出显示带有上述警告的fmt.Fprintf(w, prettyJSON.String())语句。不知道这意味着什么,也不知道如何修复。下面是一个关于如何使用Fprintf():的示例

func (s *Server) getWorkSpaces(w http.ResponseWriter, r *http.Request) {
client := &http.Client{}
var prettyJSON bytes.Buffer
req, err := http.NewRequest("GET", "url.com", nil)
if err != nil {
// if there was an error parsing the request, return an error to user and quit function
responses.ERROR(w, http.StatusBadRequest, fmt.Errorf("unable to read request body: %v", err))
return
}

resp, err := client.Do(req)
if err != nil {
// if there was an error parsing the request, return an error to user and quit function
responses.ERROR(w, http.StatusBadRequest, fmt.Errorf("unable to read request body: %v", err))
return
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
error := json.Indent(&prettyJSON, body, "", "t")
if error != nil {
log.Println("JSON parse error: ", error)
return
}
fmt.Fprintf(w, prettyJSON.String())
}

如何停止此错误?有人能向我解释一下为什么我的VScode会在屏幕上弹出这个吗?请注意,我的代码运行良好。

fmt.Fprintf()需要一个格式字符串,该字符串可能包含将被参数替换的动词。如果你不传递参数,这表明你可能没有/使用格式字符串,所以你一开始就不应该使用fmt.Fprintf()

要只将参数写入io.Writer,请使用fmt.Fprint()

fmt.Fprint(w, prettyJSON.String())

由于格式字符串可能不会按原样输出,因此警告是完全合理的:

fmt.Print("%%n")
fmt.Printf("%%n")

上面的打印(在Go Playground上试试(:

%%
%

%是格式字符串中的一个特殊字符,要发出(输出(单个%符号,必须在格式字符串中使用双%。这只是为了证明这一点,还有其他的区别。

参见相关问题:

格式字符串中没有占位符

格式化Go字符串而不打印?

最新更新