登录
首页 >  Golang >  Go问答

golang 的方法的访问权限

来源:stackoverflow

时间:2024-02-25 14:15:27 188浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《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 !!!" 
}
  1. 在第 2 行,为什么 fmt.println(celvar) 打印“2.00 c !!!”?

    由于 celvar 没有显式使用 string() 方法,因此我预计打印值为“2.00”

  2. 为什么第 4 行和第 7 行得出相同的值?

    同样,line 7 没有显式使用 string() 方法,因此我预计它不应该调用该方法。

  3. 另外,在golang中输入initializing时,是否习惯使用像celsius(10)这样的括号?


解决方案


这在 fmt 包的 docs 中进行了解释:

  1. 如果操作数实现 string() 方法,则将调用该方法将对象转换为字符串,然后将其转换为字符串。 根据动词(如果有)的要求格式化。

实际上,它检查某些东西是否实现了 fmt.Stringer 接口。

此规则适用于您的第一个和第三个打印语句。 format 包首先检查您的类型是否有 func string() string 方法。既然如此,它就使用这个值而不是 float64 值。

如果您想覆盖此默认值,可以将浮点动词传递给 fmt

fmt.Printf("%f\n",celVar)
>> 2.000000

对于你的最后一个问题:celsius(10)type conversion 并且相当标准。

终于介绍完啦!小伙伴们,这篇关于《golang 的方法的访问权限》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>