如何解决golang中方法的可用性
我目前正在学习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) // 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.Println(celVar)
为什么打印“ 2.00 C !!!”?
由于celVar
未明确使用String()
方法,因此我希望打印的值为“ 2.00” -
为什么LINE 4和LINE 7的值相同?
再次,LINE 7没有明确使用String()
方法,因此我希望它不应该调用该方法。 -
此外,当
initializing
键入golang时,是否习惯使用celsius(10)
这样的括号?
解决方法
在fmt
包的docs中对此进行了解释:
- 如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后将该字符串转换为 根据动词的要求进行格式化(如果有)。
有效地,它检查某些内容是否实现了fmt.Stringer接口。
此规则适用于您的第一个和第三个打印语句。格式包首先检查您的类型上是否带有func String() string
方法。既然如此,它将使用此值而不是float64值。
如果要覆盖此默认值,可以将浮点动词传递给fmt
:
fmt.Printf("%f\n",celVar)
>> 2.000000
对于您的最后一个问题:celsius(10)
是type conversion,相当标准。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。