golang中的方法可用性
我目前正在学习golang中的type关键字golang中的方法可用性,go,types,Go,Types,我目前正在学习golang中的type关键字 package main import ( "fmt" ) type celsius float64 func (c celsius) String() string { return fmt.Sprintf("%.2f C !!!", c) } func main() { var celVar celsius = 2 fmt.Println(celVar) // p
package main
import (
"fmt"
)
type celsius float64
func (c celsius) String() string {
return fmt.Sprintf("%.2f C !!!", c)
}
func main() {
var celVar celsius = 2
fmt.Println(celVar) // prints "2.00 C !!!" // LINE 2
c := celsius(10).String() // LINE 4
fmt.Println(c) // prints "10.00 C !!!"
t := celsius(10) // LINE 7
fmt.Println(t) // prints "10.00 C !!!"
}
在第2行,为什么fmt.PrintlncelVar打印2.00C!!!?
因为celVar没有显式地使用String方法,所以我希望打印的值是2.00
为什么第4行和第7行的结果相同?
同样,第7行没有显式使用String方法,所以我希望它不应该调用该方法
另外,在golang中初始化类型时,是否习惯使用像celsius10这样的括号
这在fmt包的中进行了解释:
如果操作数实现方法字符串,则将调用该方法将对象转换为字符串,然后
按照动词(如有)的要求格式化。
有效地,它检查是否有东西实现了接口
此规则适用于第一次和第三次打印语句。格式包首先检查您的类型上是否有func String方法。因为它是这样做的,所以它使用这个值而不是float64值
如果要覆盖此默认值,可以将浮点谓词传递给fmt:
fmt.Printf%f\n,celVar
>> 2.000000
关于最后一个问题:celsius10是一个非常标准的工具。请务必阅读您使用的功能的完整文档。所有这些都与type关键字无关。我目前正在学习golang中的type关键字是什么。请注意1、2和3。与type关键字无关。谢谢,但是仅仅让您知道文档本身对于初学者来说可能很难,这取决于小节。是的,事实上,我现在知道我的问题与类型没有直接关系,所以我编辑了问题的标题@沃克@mkopriva