4

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)
}

明確でないのは次のことです:ByteSizefunc (b ByteSize) String() stringの両方がどこかのパッケージで定義されている場合、そのパッケージをインポートしますがByteSize、独自の文字列メソッドを使用して記述して の表示をカスタマイズしたい場合、Go は独自の文字列メソッドを呼び出すかどうかをどのように認識しますか?以前に定義された文字列メソッド? 文字列を再定義することさえ可能ですか?

4

1 に答える 1

10

新しいメソッドが必要な場合に型をラップすることを意図しているため、定義します

type MyByteSize ByteSize
func (b MyByteSize) String() string{

}

定義されたモジュールの外部の型でメソッドを定義することはできません。

于 2009-11-13T21:13:59.690 に答える