初始化描述了一种附接在转到编程方法来任意物体语言。作为一个例子,它们示出了用于新定义的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的显示,如何去知道是否叫我自己的字符串的方法或先前定义字符串的方法?它甚至有可能重新定义字符串?

有帮助吗?

解决方案

其目的是为你包装一个类型,如果你想在其上的新方法,所以你会定义

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

}

可以不定义它被定义相信模块的外部上的类型的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top