gpt4 book ai didi

go - golang中fmt.Println的实现细节

转载 作者:IT王子 更新时间:2023-10-29 01:19:51 25 4
gpt4 key购买 nike

考虑这段代码

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
}

我有两个问题

  1. 为什么我必须将 bigSum 作为 reference 传递(通过使用 &)以获得正确答案,否则我们将取回对象?

  2. Println 在 Go 中如何工作?我的意思是它怎么知道它应该为不同的类型应用哪种格式?

最佳答案

  1. Println 判断值是否实现了 Stringer 接口(interface)。如果是,那么它将调用 String() 来获取格式化值。 big.Float 为指针接收器实现它,因此您必须传递一个引用。否则 Println 将检测到它是一个结构并使用反射打印它的所有字段
  2. Go 是开源的。大家可以自己看看https://golang.org/src/fmt/print.go?#L738它使用类型开关和反射。

关于go - golang中fmt.Println的实现细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007494/

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