Go语言中的指针、结构体与接口详解
1. 指针的使用
在Go语言里,当我们改变一个变量时,往往只是改变了函数内部的副本。例如下面的代码:
func changeValue(word string) {
word += "world"
}
func main() {
say := "hello"
changeValue(say)
fmt.Println(say)
}
上述代码会输出 hello
。这是因为在函数中传递的字符串,实际上是传递了一个副本,对副本的修改不会影响原始变量。
指针是解决这个问题的关键。指针存储的是值的内存地址,而非值本身。例如:
var intPtr *int
x := 23
intPtr = &x
这里的 intPtr
存储了 x
的内存地址。通过解引用操作符 *
,我们可以查看或修改 x
的值:
fmt.Println(x) // 输出: 23
fmt.Println(*intPtr) // 输出: 23
*intPtr = 80 // 修改 x 的值为 80
fmt.Println(x) // 输出: 80