Golang Initialization描述了一种将方法附加到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如何知道是调用我自己的字符串方法还是先前定义的字符串方法?甚至可以重新定义字符串吗?
答案 0 :(得分:10)
如果你想要新的方法,你打算包装一个类型,所以你要定义
type MyByteSize ByteSize
func (b MyByteSize) String() string{
}
您不能在我认为定义的模块之外的类型上定义方法。