Golangの初期化では、Go プログラミング言語でメソッドを任意のオブジェクトにアタッチする方法について説明しています。String
例として、新しく定義されたByteSize
型のメソッドを示します。
type ByteSize float64
const (
_ = iota; // ignore first value by assigning to blank identifier
KB ByteSize = 1<<(10*iota);
MB;
GB;
TB;
PB;
YB;
)
String などのメソッドを型にアタッチする機能により、そのような値は、一般的な型の一部であっても、印刷用に自動的にフォーマットすることができます。
func (b ByteSize) String() string {
switch {
case b >= YB:
return fmt.Sprintf("%.2fYB", b/YB)
case b >= PB:
return fmt.Sprintf("%.2fPB", b/PB)
case b >= TB:
return fmt.Sprintf("%.2fTB", b/TB)
case b >= GB:
return fmt.Sprintf("%.2fGB", b/GB)
case b >= MB:
return fmt.Sprintf("%.2fMB", b/MB)
case b >= KB:
return fmt.Sprintf("%.2fKB", b/KB)
}
return fmt.Sprintf("%.2fB", b)
}
明確でないのは次のことです:ByteSize
とfunc (b ByteSize) String() string
の両方がどこかのパッケージで定義されている場合、そのパッケージをインポートしますがByteSize
、独自の文字列メソッドを使用して記述して の表示をカスタマイズしたい場合、Go は独自の文字列メソッドを呼び出すかどうかをどのように認識しますか?以前に定義された文字列メソッド? 文字列を再定義することさえ可能ですか?