知识卡片

Go指针不支持指针运算

专业/工作 · 483

内容

Go的指针在语法和语义上都类似C/C++,但故意去掉了指针运算(不能对指针做加减来”移动”到相邻内存)。C/C++里指针运算是一整类bug的根源——越界访问、指针算错偏移量导致踩到不相关的内存、缓冲区溢出,这些错误往往难以定位且能造成安全漏洞。发散:这是”精简一个特性换取消灭一整类错误”的典型例子——指针运算的表达力被完全阉割,但换来的是Go指针在使用上几乎不可能越界,安全性的提升远大于损失。

参考来源

- 位置:《Go语言程序设计》第4章《集合类型》(源文件:_epub-src/OEBPS/text00038.html) - 结论依据:原文在该章节围绕“Go的指针在语法和语义上都类似C/C++,但故意去掉了指针运算(不能对指针做加减来"移动"到相邻内存)”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:动内存管理机制使得这样做非常安全,因为只要一个指针引用一个变量,那个变量就会在内存中得以保留。这也是为什么在Go语言的函数内部返回指向本地变量的指针是安全的(在C/C++中,对于非静态变量的同样操作将是灾难)。 在某些场景下,我们需要传递非引用类型的可修改值,或者需要高效地传入大类型的值,这个时候我们需要用到指针。Go语言提供了两种创建变…