pointers - 什么时候指针是惯用的?

标签 pointers go

我来自没有明确指针的语言,所以我真的不明白它们存在的意义(没有双关语意)。

问题是,大多数时候我不知道为什么要传递一个指向函数的指针。我明白当你传入一个指针时,对变量的修改会在任何地方对值进行,但这有什么意义呢?为什么不只修改值并返回结果呢?

例如,http.HandlerFunc 是一个接收http.ResponseWriter*http.Request 作为参数的函数。我读到接口(interface)实际上是指针(对吗?),但我不明白的是,为什么?

为什么我会得到指向作者的指针?我没有修改它,我只是写信给它。而且,为什么我会得到一个指向请求的指针?我正在做类似 request.FormValue() 的事情。

我在这里试图通过这些示例确定的是“我什么时候需要传入指针?”这个问题的答案

我现在的做法是编写我的代码,尝试编译它,通过添加一个符号和星号来修复说我必须传入指针的错误,直到错误通过。但是,我觉得这个对指针的理解还未完全理解的概念很快就会在我背后咬一口。

最佳答案

您可以将指针视为指向对象内存地址的值。与大多数数据结构相比,指针很小(比如 8 个字节)。

很多时候你会得到一个指向对象的指针,因为传递这 8 个字节比创建要传递的整个对象的副本要快得多。

在请求对象的情况下,与仅传递有权访问原始数据的指针相比,创建请求下所有内容(有效负载、 header 等)的副本将非常昂贵。

关于pointers - 什么时候指针是惯用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35000292/

相关文章:

C:将指向结构的指针传递给函数时出现奇怪的行为

java - 将对象添加到 Java 集合时,是按值添加还是按引用添加?

c++ - 空指针如何改变它的值?

c - 如何仅使用文件指针正确遍历C循环

go - 有没有办法在 Go 中反向迭代 slice ?

google-app-engine - Google 应用引擎 + Go + REST 服务

go - 我想通过将文件名作为用户输入来读取文件

c - c中最有效的指针算术类型

go - 是否可以将尾部 header 刷新到客户端?

go - 有没有办法访问结构字段之类的接口(interface)或使用相同字段更改类型(不同结构)