2017-05-10 7 views
0

私のプログラムです。Go:%sまたは%vにエラーオブジェクトを出力する正しい書式指定子は何ですか?

package main 

import (
    "errors" 
    "fmt" 
) 

func main() { 
    a := -1 
    err := assertPositive(a) 
    fmt.Printf("error: %s; int: %d\n", err, a) 
    fmt.Printf("error: %v; int: %d\n", err, a) 
} 

func assertPositive(a int) error { 
    if a <= 0 { 
     return errors.New("Assertion failure") 
    } 
    return nil 
} 

ここに出力があります。このプログラムで

error: Assertion failure; int: -1 
error: Assertion failure; int: -1 

、それは私がerrorオブジェクト 印刷する%sまたは%vを使用するかどうか違いはありません。

私には2つの質問があります。

  1. それは%s%vため 違いになるだろう、エラーを印刷中にいずれかのシナリオがありますか?
  2. この場合に使用する正しい書式指定子は何ですか?
+1

%sを使用してください(しかし、%vと%sはfmtのパッケージの説明で調べてください)。 – Volker

+0

@Volker '%v'と'%s'は何をしているのか分かります。私は 'error'オブジェクトに'%s'を推奨する理由を理解したいと思います。合理性を分かりますか? –

+1

間接参照が少なくなりました。出力されるのは 'Error()'メソッドの出力であり、それは文字列です:Clearer。 – Volker

答えて

1

According to docs

%v the value in a default format 
... 
%s the uninterpreted bytes of the string or slice 

Also, more information about error

エラータイプは、インタフェースタイプです。エラー変数は、 の値を表し、その値は文字列として記述できます。

したがって、%sとしてください。

関連する問題