gpt4 book ai didi

go - Go 中的函数冲突

转载 作者:IT王子 更新时间:2023-10-29 00:36:30 24 4
gpt4 key购买 nike

戈朗 Initialization描述了一种在 Go 编程语言中将方法附加到任意对象的方法。例如,他们为新定义的 ByteSize 类型显示了一个 String 方法:

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怎么知道是调用自己的字符串方法还是调用之前定义的字符串方法呢?甚至可以重新定义字符串吗?

最佳答案

如果你想要新的方法,你可以包装一个类型,所以你可以定义

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

}

我相信你不能在它定义的模块之外的类型上定义方法。

关于go - Go 中的函数冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com