“带有动态格式字符串且没有其他参数的 printf 样式函数应该使用 print 样式函数”是什么意思?

问题描述 投票:0回答:1

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

我的 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 将其显示在屏幕上吗?请注意,我的代码运行良好。

go
1个回答
11
投票

fmt.Fprintf()
需要一个格式字符串,其中可能包含将被参数替换的动词。如果您不传递参数,则暗示您可能没有/使用格式字符串,因此您不应该首先使用
fmt.Fprintf()

要将参数写入

io.Writer
,请使用
fmt.Fprint()

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

来自

vet
的警告是完全合理的,因为格式字符串可能无法按原样输出

fmt.Print("%%\n") fmt.Printf("%%\n")
上面的打印(在

Go Playground上尝试一下):

%% %

%

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


相关问题:

  • 格式字符串中没有占位符

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

© www.soinside.com 2019 - 2024. All rights reserved.