深入理解Go的interface内部执行原理( 二 )


深入理解Go的interface内部执行原理

文章插图
 
//4 newValue.String() 到底做了啥 , 其实根据上面我们很容易知道 , 无法就是 newValue.tab.fun[0].(newValue.data)  , 所以就是这么简单 。
总结1、go的 interface{} 转换过程中至少做一次内存拷贝 , 所以传递指针是最好的选择 。
type User struct { Name string Ageint}func main() {var empty interface{} = User{} //这里会拷贝一次 , 将user转换成interface{} , 所以函数传递过程中也别直接使用结构体传递}正确写法
func main() { var empty interface{} = &User{}}2、有人会问到字符串传递是否内存拷贝 , 回答否 , 因为字符串底层是一个 byte[] 数组 , 他的结构组成是
type StringHeader struct { Data uintptr //数据 , 是一个二进制数组 Lenint// 长度}所以64位计算机 , 字符串的长度是128位 , 占用16个字节
3、减少使用 interface{}  , 因为会有不必要的开销 , 其次Golang本身是一个强类型语言 , 静态语言 , 申明式是最好的方式 。
4、 interface{} 是反射的核心 , 后期我会讲解反射




推荐阅读