考虑这段代码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个赞
Println
确定值是否实现Stringer
接口。如果是这样,它将调用String()
来获取格式化的值。big.Float
为指针接收器实现它,所以你必须传递一个引用。否则Println
将检测到它是一个结构并使用反射打印它的所有字段Go 是开源的。您可以自己查看https://golang.org/src/fmt/print.go?#L738它使用类型开关和反射。
- 1 回答
- 0 关注
- 179 浏览
添加回答
举报
0/150
提交
取消