2016-12-19 4 views
1

私はドキュメントを見て、この情報を見つけることができませんでした。 構造体を指定すると、構造体を印刷するときにfmt.Printファミリによって自動的に使用されるメソッド(たとえば、func (k Koala) String() string)を実装できますか? どこかにインタフェースがあるかもしれませんが、見つけられませんでした。`fmt.Print`が使う` ToString() `と同じGoがありますか?

答えて

5

はい、それはfmt.Stringer()

と呼ばれるストリンガーは、その値の「ネイティブ」フォーマットを定義する文字列方法を有する任意の値で実現されます。 Stringメソッドは、文字列を受け入れる形式やPrintなどの書式なしのプリンタにオペランドとして渡された値を出力するために使用されます。

type Stringer interface { 
    String() string 
} 

fmt.Println("foo")fmt.Println(someStringer)が等しく有効であるため、*print*機能がStringer()が自分自身をインターフェースは受け付けておりません。私はあなたが正確これがどのように機能するかが、簡単で*print*機能を見にprint.go source codeを経るお勧めします。

  • interface{}を受け入れます。
  • 内蔵タイプかどうかを確認してください(例:stringintなど)。そうであればフォーマットしてください。
  • タイプに.String()メソッドがあるかどうかを確認し、そのタイプが存在する場合はそれを使用します。

正確なロジックはもう少し複雑です。前述のように、私はあなた自身でソースコードを調べることをお勧めします。それはまったく読みやすいGoです。

関連する問題