在 Go 语言中,"解引用"和"间接引用"是与指针相关的概念。
- 解引用 (Dereferencing):
解引用是指通过指针访问它所指向的变量的值。在 Go 中,使用星号(*)来解引用一个指针。
例如:
go
var x int = 10
var p *int = &x // p 是指向 x 的指针
fmt.Println(*p) // 输出 10,这里的 *p 就是解引用
*p = 20 // 通过解引用修改 x 的值
fmt.Println(x) // 输出 20
- 间接引用 (Indirect reference):
间接引用通常指通过指针间接地引用或访问某个值。这个概念与解引用密切相关,因为你正是通过解引用来进行间接引用的。
例如:
go
type Person struct {
Name string
Age int
}
var person Person = Person{"Alice", 30}
var ptr *Person = &person
fmt.Println(ptr.Name) // 输出 "Alice",这是间接引用
// 上面的语句等同于 (*ptr).Name,但 Go 允许我们直接使用 ptr.Name
在这个例子中,ptr.Name
是一个间接引用,我们通过指针 ptr
间接地访问了 person
的 Name
字段。
- 多级指针:
Go 也支持多级指针,这时解引用和间接引用可能会变得更复杂:
go
var x int = 10
var p *int = &x
var pp **int = &p
fmt.Println(**pp) // 输出 10,这里进行了两次解引用