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函数之间的内部关系
我不是Go作家,也不是任何人,但是我认为设计是Go的三个属性的产物:
Get
String
首先导致的方法,如Int,Float,Bool,String这些方法等,所有会产生恐慌,如果叫上错误类型的值,除了String。这是因为Stringfmt可能会使用它,并且可能还有许多其他软件包会使用它来获取值的字符串表示形式,并且仅字符串值可打印肯定是不合理的。可以说,应该有另一种方法返回基础字符串而不是String,但这将意味着api中的一致性较低,因此他们选择了两种方法中的一种。
Int
Float
Bool
反映文件