📅  最后修改于: 2023-12-03 15:11:00.808000             🧑  作者: Mango
在 Golang 中,指针是一种非常重要的数据类型。指针是为了能在函数间传递变量而存在的,与其他常见高级语言(如 C/C++)中的指针类似。本文将介绍 Golang 中指针的基础知识,以及 Golang 中指针和其他语言的指针的一些异同点。
在 Golang 中,使用 &
符号可以获取一个变量的地址,使用 *
符号可以获取指针所指向的变量。例如:
num := 10
numAddr := &num // 获取变量 num 的地址
fmt.Println(*numAddr) // 输出变量 num 的值
在上述代码中,numAddr
是 num
的指针,可以通过 *numAddr
获取 num
的值。
如果变量是一个指针类型,那么可以通过 *
符号获取指针所指向的值。例如:
str := "hello"
strPtr := &str
fmt.Println(*strPtr) // 输出 "hello"
与 C/C++ 中指针不同,Golang 中的指针不支持进行指针运算,即不支持指针加减操作。除此之外,Golang 还提供了自动垃圾回收机制(GC),避免了内存泄漏等问题。这也是 Golang 中指针使用较为安全的原因之一。
另外,Golang 中的指针类型可以为任何类型的指针。例如,可以定义一个 *int
类型的指针,也可以定义一个 *string
类型的指针。
指针最常见的使用场景就是在函数间传递大型变量,例如数组、结构体等。将这些变量传递给函数作为参数时,会将整个变量复制一遍,导致性能问题。而传递指针则可以避免这个问题,因为指针只是一个小的数据类型。
具体例子可以看下面的代码:
type person struct {
name string
age int
}
func main() {
p := person{name: "Tom", age: 18}
fmt.Println(p.name, p.age)
change(&p)
fmt.Println(p.name, p.age)
}
func change(p *person) {
p.name = "Jerry"
p.age = 20
}
在上述代码中,change
函数接收了一个 *person
类型的指针,通过修改指针所指向的变量 p
的值修改了传入的 person
变量的值。这样可以避免将整个 person
变量复制一遍,提高程序性能。
本文介绍了 Golang 中指针的基础知识,以及 Golang 中指针和其他语言的指针的一些异同点。通过了解指针的使用场景,可以更好地使用指针来提高程序性能。