标签:完美主义 限制 unsafe 解密 编译 Go 相互 指针
深度解密Go语言之unsafe
限制一:Go的指针不能进行数学运算
。
来看一个简单的例子:
a := 5p := &a
p++p = &a + 3
上面的代码将不能通过编译,会报编译错误:invalid operation
,也就是说不能对指针做数学运算。
限制二:不同类型的指针不能相互转换
。
例如下面这个简短的例子:
func main() { a := int(100) var f *float64
f = &a}
也会报编译错误:
cannot use &a (type *int) as type *float64 in assignment
关于两个指针能否相互转换,参考资料中 go 101 相关文章里写得非常细,这里我不想展开。个人认为记住这些没有什么意义,有完美主义的同学可以去阅读原文。当然我也有完美主义,但我有时会克制,嘿嘿。
限制三:不同类型的指针不能使用==或!=比较
。
只有在两个指针类型相同或者可以相互转换的情况下,才可以对两者进行比较。另外,指针可以通过 ==
和 !=
直接和 nil
作比较。
限制四:不同类型的指针变量不能相互赋值
。
这一点同限制三。
参考
https://mp.weixin.qq.com/s/OO-kwB4Fp_FnCaNXwGJoEw
标签:完美主义,限制,unsafe,解密,编译,Go,相互,指针
来源: https://www.cnblogs.com/zhouj-happy/p/10972863.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。