⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go 指针详解

&取地址、*解引用、值传递 vs 指针传递、new 函数 · 难度:进阶 · +20XP

Go 指针

指针存储变量的内存地址。Go 的指针比 C 简单安全——没有指针运算,编译器帮你管理。

基本操作

x := 42
p := &x          // p 是指向 x 的指针(类型为 *int)
fmt.Println(p)   // 输出内存地址,如 0xc000014088
fmt.Println(*p)  // 解引用:输出 42
*p = 100         // 通过指针修改 x
fmt.Println(x)   // 100

// new 函数:分配内存并返回指针 ptr := new(int) // *int,指向零值 0 *ptr = 99

值传递 vs 指针传递

Go 函数参数默认是值传递(复制一份)。需要修改原值时,传指针:

// 值传递:不修改原值
func addOne(n int) { n++ }  // 无效!

// 指针传递:修改原值 func addOnePtr(n *int) { *n++ } // 有效!

x := 10 addOne(x) // x 还是 10 addOnePtr(&x) // x 变成 11

指针 vs 值接收者

值接收者指针接收者
func (u User) Method()func (u *User) Method()
操作的是副本,不修改原值操作的是原值,可以修改
小型 struct 或不需要修改时用大型 struct 或需要修改时用
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0