为了账号安全,请及时绑定邮箱和手机立即绑定

golang中fmt.Println的实现细节

golang中fmt.Println的实现细节

Go
凤凰求蛊 2022-01-10 10:35:22
考虑这段代码import (  "fmt"  "math/big")func main() {    var b1,b2,b3,bigSum big.Float    b1.SetFloat64(25.3)    b2.SetFloat64(76.2)    b1.SetFloat64(53.1)    bigSum.Add(&b1, &b2).Add(&b3, &bigSum)    fmt.Println(bigSum)   // {53 0 0 1 false [9317046909104082944] 8}    fmt.Println(&bigSum)  // 129.3 }我有 2 个问题为什么我必须bigSum作为参考传递(通过使用&)才能得到正确的答案,否则我们会得到一个对象?Println在 Go 中如何工作?我的意思是它如何知道它应该适用于不同类型的格式?
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

  1. Println确定值是否实现Stringer接口。如果是这样,它将调用String()来获取格式化的值。big.Float为指针接收器实现它,所以你必须传递一个引用。否则Println将检测到它是一个结构并使用反射打印它的所有字段

  2. Go 是开源的。您可以自己查看https://golang.org/src/fmt/print.go?#L738它使用类型开关和反射。


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信