golang中的方法可用性

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

我目前正在学习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.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