Golang 开发实战day12 - 指针
在 Golang 中,指针是一种强大的工具,可以让我们直接操作内存中的数据。与其他编程语言相比,Golang 的指针更加轻量级,但也更灵活,这使得它在性能和开发效率之间取得了良好的平衡。
1、指针的基本概念
指针就像一张指向内存中某个位置的地址的纸条。我们可以通过指针来访问和修改该位置的数据。
1.1 声明指针:
var p *int // 声明一个指向 int 型数据的指针
1.2 获取指针的值:
i := 10
p = &i // 将变量 i 的地址赋给指针 p
fmt.Println(*p) // 输出 10
1.3 修改指针的值:
*p = 20 // 将指针 p 指向的值修改为 20
fmt.Println(i) // 输出 20
2 示例代码
示例一
func updateName(x string) {
x = "大雄"
}
func main() {
name := "哆啦A梦"
updateName(name)
fmt.Println("名字所在的内存地址:", &name)
m := &name
fmt.Println(m)
fmt.Println(name)
}
Output:
底下就是帮助理解的结构,m是引用了name的指针,所以地址也是指向了name的地址。比较简陋,往君见谅。
|---name---|-----m-----|
| 0x001 | 0x002 |
|----------|-----------|
| "哆啦A梦" | p0x001 |
|----------|-----------|
示例二
type Person struct {
Name string
Age int
}
func main() {
person := Person{Name: "大雄", Age: 10}
name := &person.Name // 获取指向 Name 字段的指针
*name = "哆啦A梦" // 修改 Name 字段的值
age := &person.Age // 获取指向 Age 字段的指针
*age = 12 // 修改 Age 字段的值
fmt.Println(person)
}
Output:
3 指针的优点
- 高效: 指针可以让我们直接操作内存中的数据,而无需进行额外的复制操作,因此效率更高。
- 方便: 指针可以方便地传递和共享数据,而无需创建额外的副本。
- 灵活: 指针可以让我们直接修改内存中的数据,而无需创建新的变量。
4 指针的注意事项
- 指针不能指向不存在的数据: 确保指针指向的内存地址有效,否则会导致程序崩溃。
不要同时使用多个指针指向同一块内存: 避免数据竞争,导致程序行为不可预料。 - 释放不再使用的指针: 使用 defer 语句或其他方式释放不再使用的指针,避免内存泄漏。
5 指针的常见用法
- 函数参数和返回值: 指针可以作为函数的参数和返回值,提高函数的效率和灵活性。
- 结构体和数组: 指针可以用于访问和修改结构体和数组中的元素。
- 内存管理: 指针可以用于手动管理内存,例如分配和释放内存空间。