2017-10-20 4 views
0

ワットタイプhttp.ResponseWriterである欠落変数せるgolangは

これは結構です:

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

出力:100 488メガバイト/ 488メガバイト

これは問題を引き起こします:

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

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

+0

問題を解決します!二重%を使用してパーセント記号をエスケープしなければならないことが判明しました。詳細については、https://stackoverflow.com/questions/1860159/how-to-escape-the-percent-sign-in-cs-printfを参照してください。 – Bruce

+1

あなたはPrintlnについて聞いたことがあります。 – Volker

答えて

4

%は特別なプレースホルダーシンボルです。それをシンボルとして文字列に入れたい場合は、それを複製してください。同様に:

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

出力:

Growth 50% 
+0

コードで間違った引用符が使用されています。より具体的には: '無効な識別子文字U + 201C '"'と 'U + 201D '' ''が無効です。 – tgogos

+2

@tgogos、thanks、fixed。 – kostix

+0

申し訳ありませんが、私は携帯電話から送った - とautocorrectionがシンボルを変更することを決めたように見えます。 –

4

通常fmt.Fprintfや友人に書式指定子として任意のアプリケーションの文字列を使用することをお勧めではありません。アプリケーションは、固定形式の文字列を使用するか、文字列をバイトに変換して、バイトを直接レスポンスに書き込む必要があります。

は、ここでフォーマット文字列でそれを行う方法は次のとおりです。

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

はここで書式設定をスキップして、応答に直接書き込む方法は次のとおりです。

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