题
初始化描述了一种附接在转到编程方法来任意物体语言。作为一个例子,它们示出了用于新定义的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
的显示,如何去知道是否叫我自己的字符串的方法或先前定义字符串的方法?它甚至有可能重新定义字符串?
解决方案
其目的是为你包装一个类型,如果你想在其上的新方法,所以你会定义
type MyByteSize ByteSize
func (b MyByteSize) String() string{
}
可以不定义它被定义相信模块的外部上的类型的方法。
不隶属于 StackOverflow