& 和 * 指针
在 Go 中,将变量作为函数参数传递有时会引发编译器错误,可以使用指针来解决。然而,& 和 * 指针之间的区别常常会导致混乱。本文旨在阐明两种指针类型的差异和使用场景。
解决错误
在您的示例中,错误可能是由于预期参数类型与实际参数类型不匹配造成的变量通过。 Decode 函数需要一个指向 User 结构的地址或指针,但您直接传递该值。要解决这个问题,您可以使用 & 运算符来获取 User 变量的地址:
if err := decoder.Decode(&u); err != nil { http.Error(rw, "could not decode request", http.StatusBadRequest) return }
理解指针
指针是保存其他变量地址的变量。 & 运算符返回变量的地址,而 * 运算符允许我们访问该地址处的值。
在上面的示例中,&u 给出 User 结构体的地址,然后将其传递给解码需要指针的函数。
但是,如果您使用以下方法创建了 User 实例:
u := new(User)
那么您已经是一个指针,并且 & 运算符不是必需的。您还可以使用显式创建指针:
var u *User
& 和 * 之间的区别
& 和 * 之间的主要区别是 * 表示重定向到存储在地址中的值,而 & 返回地址
示例:
var y int var pointerToY *int var pointerToPointerToInt **int y = 10 pointerToY = &y pointerToPointerToInt = &pointerToY
现在:
- y 的值为 10。
- *pointerToY重定向到 y 并打印其值10.
- &y返回y的地址。
- &pointerToY返回pointerToY的地址。
- &pointerToPointerToInt返回pointerToPointerToInt的地址。
- **pointerToPointerToInt打印值 10,因为它重定向两次以获取to y.
使用场景
&(运算符地址):
- 传递变量的地址到一个函数。
- 在分配给一个函数之前获取地址指针。
- 比较两个指针。
示例:
func swap(x, y *int) { *x, *y = *y, *x }
*(解引用运算符):
- 访问存储在地址。
- 为指针赋值。
- 比较两个指针。
示例:
var p *int *p = 10
结论:
理解 & 和 指针对于 Go 中有效的变量处理和解决编译器错误至关重要。关键区别在于 的“重定向”行为,而 & 返回变量的实际地址。通过仔细考虑预期的使用场景,您可以有效地利用 Go 代码中的指针来实现最佳性能和正确性。
以上是Go 指针:'&”(地址)和'*”(取消引用)之间有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver CS6
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具