如何使用Golang实现指针与引用_Golang 指针使用与操作实践

指针是存储变量内存地址的变量,通过&取地址、*解引用。Go中用指针实现函数间共享修改数据,避免大对象复制,new(T)返回T类型零值指针,make仅用于slice、map、channel初始化,解引用nil指针会panic,函数常返回指针+error需判空处理。

如何使用golang实现指针与引用_golang 指针使用与操作实践

在 Golang 中,指针和引用是操作变量内存地址的核心机制。虽然 Go 是一门高级语言,隐藏了许多底层细节,但理解指针对于编写高效、灵活的代码至关重要。本文将直接切入重点,讲解如何在实际开发中正确使用指针与引用。

什么是指针?

指针是一个变量,它存储另一个变量的内存地址。通过指针,可以直接读取或修改该地址上的值。在 Go 中,使用 & 获取变量地址,使用 * 解引用访问值。

示例:

name := "Alice"
ptr := &name // ptr 是 *string 类型,保存 name 的地址
fmt.Println(ptr) // 输出类似 0xc000010230(地址)
fmt.Println(*ptr) // 输出 Alice(解引用)

改变指针指向的值会影响原始变量:

*ptr = "Bob"
fmt.Println(name) // 输出 Bob

函数中使用指针传递

Go 默认按值传递参数,这意味着函数接收到的是原始数据的副本。如果想在函数内部修改原变量,必须传入指针。

立即学习“go语言免费学习笔记(深入)”;

场景:交换两个整数

func swap(a, b *int) {
*a, *b = *b, *a
}
x, y := 10, 20
swap(&x, &y)
fmt.Println(x, y) // 输出 20 10

结构体常配合指针使用,避免复制大对象:

type Person struct {
Name string
Age int
}
func (p *Person) SetName(newName string) {
p.Name = newName
}

p *Person 表示该方法作用于指针类型,可修改原结构体。

new 与 make 的区别

new(T) 用于创建任意类型的零值,并返回其指针:

numPtr := new(int)
*numPtr = 42
fmt.Println(*numPtr) // 输出 42

make(T) 仅用于 slice、map 和 channel,初始化后返回类型本身(非指针),但其底层数据是引用类型。

错误用法:mptr := make(*map[string]int) ❌ 不支持

正确方式:m := make(map[string]int) ✅ 返回的就是可用的 map

nil 指针与安全检查

未初始化的指针为 nil。解引用 nil 指针会引发 panic。

var p *int
if p != nil {
fmt.Println(*p)
} else {
fmt.Println("指针为空")
}

常见模式:函数返回可能失败时返回指针 + error:

func findUser(id int) (*User, error) {
if id == 1 {
user := User{Name: "Tom"}
return &user, nil
}
return nil, fmt.Errorf("用户不存在")
}

调用时需判断是否为 nil:

u, err := findUser(99)
if err != nil || u == nil {
log.Println(err)
return
}
fmt.Println(u.Name)

基本上就这些。掌握指针的关键在于理解何时需要共享或修改数据,以及避免不必要的拷贝。不复杂但容易忽略。

以上就是如何使用Golang实现指针与引用_Golang 指针使用与操作实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1427784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 21:47:22
下一篇 2025年12月16日 21:48:24

相关推荐

发表回复

登录后才能评论
关注微信