Go中用&获取变量内存地址,%p格式化输出;可赋值给指针变量并解引用;Delve调试器支持运行时查看地址;结构体、切片字段及底层数组地址也可观察。

在 Go 语言中,查看变量的内存地址是理解程序运行机制、调试内存问题或学习指针操作的重要手段。通过取地址运算符和调试工具,我们可以直观地观察变量在内存中的位置。
Go 使用 & 运算符来获取变量的内存地址。这个操作返回一个指向该变量类型的指针。
package main
import "fmt"
func main() {
var num int = 42
fmt.Printf("变量值: %d\n", num)
fmt.Printf("内存地址: %p\n", &num)
}
输出结果类似:
变量值: 42 内存地址: 0xc00001a088
%p 是格式化输出指针的标准方式,会以十六进制形式打印地址。
立即学习“go语言免费学习笔记(深入)”;
除了 fmt.Printf,你还可以将地址赋值给指针变量,再进行检查:
ptr := &num
fmt.Println("指针值(即地址):", ptr)
fmt.Println("通过指针读取值:", *ptr)
这有助于验证指针是否正确指向目标变量,同时也能反向解引用查看内容。
对于更深入的调试,推荐使用 Go 官方推荐的调试工具 Delve(dlv)。它可以让你在运行时暂停程序并 inspect 变量地址。
安装 Delve:
go install github.com/go-delve/delve/cmd/dlv@latest
启动调试:
dlv debug main.go
在调试器中设置断点并打印变量地址:
(dlv) break main.main (dlv) continue (dlv) print &num (dlv) print ptr
Delve 能显示更精确的内存布局和变量状态,适合复杂场景下的分析。
对于复合类型,也可以分别查看字段或元素的地址:
type Person struct {
Name string
Age int
}
p := Person{Name: "Alice", Age: 30}
fmt.Printf("结构体地址: %p\n", &p)
fmt.Printf("Name 字段地址: %p\n", &p.Name)
切片底层数组的首元素地址可用于判断是否共享内存:
s := []int{1, 2, 3}
fmt.Printf("底层数组首地址: %p\n", &s[0])
基本上就这些。用好 & 和 %p 能快速定位变量地址,配合 Delve 可深入分析运行时行为。不复杂但容易忽略细节,比如 nil 指针不能取地址、常量无法取地址等限制需要注意。
以上就是Golang如何查看变量内存地址_Golang取地址运算符与调试技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号