小编典典

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

go

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]之类的东西,我也知道我应该附加将Int()函数转换为ValueOf()以获取val的实际值,但我不了解值struct和String函数与Println函数之间的内部关系


阅读 296

收藏
2020-07-02

共1个答案

小编典典

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

  • 吸气剂通常离Get
  • String如果可用,fmt软件包将使用一种方法。资源
  • 接口隐式满足

首先导致的方法,如IntFloatBoolString这些方法等,所有会产生恐慌,如果叫上错误类型的值,除了String。这是因为Stringfmt可能会使用它,并且可能还有许多其他软件包会使用它来获取值的字符串表示形式,并且仅字符串值可打印肯定是不合理的。可以说,应该有另一种方法返回基础字符串而不是String,但这将意味着api中的一致性较低,因此他们选择了两种方法中的一种。

反映文件

2020-07-02