gpt4 book ai didi

go - golang 中的方法可用性

转载 作者:行者123 更新时间:2023-12-01 22:33:31 25 4
gpt4 key购买 nike

我目前正在学习 type关键字在 golang 中。

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”
  • 为什么第 4 行和第 7 行会产生相同的值?
    同样,第 7 行没有明确使用 String()方法,所以我预计它不应该调用该方法。
  • 此外,当 initializing输入golang,是否习惯使用括号如celsius(10) ?
  • 最佳答案

    这在 docs 中有解释。对于fmt包裹:

    1. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then beformatted as required by the verb (if any).

    实际上,它会检查某物是否实现了 fmt.Stringer界面。
    此规则适用于您的第一个和第三个打印语句。格式包首先检查你的类型是否有 func String() string方法就可以了。既然这样做了,它就使用 this 而不是 float64 值。
    如果你想覆盖这个默认值,你可以传递一个浮点动词到 fmt :
    fmt.Printf("%f\n",celVar)
    >> 2.000000
    最后一个问题: celsius(10)type conversion并且相当标准。

    关于go - golang 中的方法可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63423898/

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