gpt4 book ai didi

reflection - 为什么 reflect.ValueOf 不能在 golang 中使用 Println 打印出 int 的真实值

转载 作者:IT王子 更新时间:2023-10-29 02:30:24 26 4
gpt4 key购买 nike

func main() {
var val interface{} = 11
fmt.Println(reflect.ValueOf(val))
}//print out : <int Value>

但是在我将字符串(如“Hello”)传递给 val 之后,它会打印出字符串本身。我注意到值结构有一个方法

func (v Value) String() string

它说如果 v'type 不是一个字符串,它返回一个形式为“[T value]”的字符串,其中 T 是 v 的类型,但是,为什么不返回类似 [int 11] 的东西,我也知道我应该在 ValueOf() 上附加一个 Int() 函数来获取 val 的实际值,但我不明白值结构与 String 函数和 Println 函数之间的内部关系

最佳答案

我不是 Go 作者或任何人,但我认为该设计是 Go 三个属性的产物:

  • getter 通常会停止 Get source
  • fmt 包使用String 方法(如果可用)。 source
  • 隐式满足接口(interface)

第一个导致像 IntFloatBoolString 等方法。所有这些如果调用错误类型的值(String 除外),方法将崩溃。这是因为 String 将被 fmt 使用,并且可能还有许多其他包来获取该值的字符串表示形式,并且仅字符串值可打印肯定是不合理的。可以说应该有另一种方法返回底层字符串而不是 String,但这将意味着 api 的一致性较低,因此他们选择了两害相权取其轻。

Reflect Documentation

关于reflection - 为什么 reflect.ValueOf 不能在 golang 中使用 Println 打印出 int 的真实值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22966494/

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