1、指针
- 变量是存储值的地方;
- 指针的值是一个变量的地址;
- 不是所有的值都有地址,但是所有的变量都有;
- 使用指针,可以在无须知道变量名字的情况下,间接读取或更新变量的值;
2、基础语法
2.1 定义指针
var ptr *int
2.2 取地址操作符 &
x := 10
ptr := &x // 将 ptr 指向了变量 x 的内存地址
2.3 解引用操作符 *
y := *ptr // 获取指针 ptr 指向的变量的值
3、实战用法
3.1 指针作为函数参数
- 可以将指针作为函数的参数,以便在函数内部修改调用者传递的变量;
func ModifyValueTo100(num int) {
fmt.Printf("输入 num: %v\n", num)
modifyValue(&num)
fmt.Printf("修改后 num: %v\n", num)
}
func modifyValue(ptr *int) {
*ptr = 100
}
3.2 指针和结构体
- 结构体字段可以是指针类型,这样可以减少复制大型结构体的开销;
- 同时可以在函数中修改结构体的字段值;
type Person struct {
Name string
Age int
}
func main() {
p := &Person{Name: "Alice", Age: 25}
fmt.Println(p.Name) // 输出 "Alice"
p.Name = "Bob" // 修改结构体字段的值
fmt.Println(p.Name) // 输出 "Bob"
}
3.3 指针和接收者
- 在方法定义中,可以使用指针作为接收者,这样可以在方法内部修改接收者的值;
type Counter struct {
count int
}
func (c *Counter) Increment() {
c.count++
}