开放的编程资料库

当前位置:我爱分享网 > Go教程 > 正文

如何在Golang语言中使用指针

Go指针教程展示了如何在Golang语言中使用指针。

$ go version
go version go1.18.1 linux/amd64

我们使用Go版本1.18。

指针保存一个值的内存地址。指针的零值是nil。与C语言不同,Go没有指针运算。

当我们复制大型结构或当我们想在不同的函数中修改数据时,指针很有用。

var pv *int = &mysum

*int是一个指向整数值的指针。&用于获取变量的地址(指针)。

fmt.Println(*pv)

*字符用于取消引用指针——它返回指针引用的值。

Go指针示例

下面是一个简单的Go指针示例。

package main

import "fmt"

func main() {

    var count int = 4
    fmt.Println(count)

    var pv = &count
    *pv = 3
    fmt.Println(pv)
    fmt.Println(*pv)

    var pv2 *int = &count
    *pv = 2
    fmt.Println(pv2)
    fmt.Println(*pv2)

    pv3 := &count
    *pv = 1
    fmt.Println(pv3)
    fmt.Println(*pv3)
}

我们定义了一个count整型变量。我们使用三种不同的形式创建了三个指向变量的指针。

var count int = 4

我们创建了count变量。

var pv = &count

我们创建一个指向count变量的指针。

*pv = 3

通过指针解引用,我们修改了count的值。

fmt.Println(pv)
fmt.Println(*pv)

我们打印pv指针的地址和值。

$ go run simple.go 
4
0xc0000140f8
3
0xc0000140f8
2
0xc0000140f8
1

去指针修改

指针可用于修改其定义函数之外的变量。

package main

import "fmt"

func modify(pv *int) {

    *pv = 11
}

func main() {

    var count int = 10
    fmt.Println(count)

    modify(&count)
    fmt.Println(count)
}

main函数中,我们定义了count变量。modify函数接受一个指针作为参数。我们可以用它来修改main函数之外的count变量。默认情况下,Go中的函数按值传递变量。

$ go run modify.go 
10
11

指向结构体的指针

指针通常与Go中的结构一起使用。

package main

import "fmt"

type User struct {
    name       string
    occupation string
}

func modify(pu *User) {

    pu.name = "Robert Roe"
    pu.occupation = "driver"
}

func main() {

    u := User{"John Doe", "gardener"}
    fmt.Println(u)

    modify(&u)

    fmt.Println(u)
}

我们有一个User结构。我们通过指针更改modify函数内部的结构。

pu.name = "Robert Roe"

pu.name(*pu).name相同。

$ go run pstruct.go 
{John Doe gardener}
{Robert Roe driver}

带新关键字的指针

new关键字将类型作为参数,分配足够的内存以适应该类型的值并返回指向它的指针。

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    name       string
    occupation string
}

func main() {

    var pu *User = new(User)
    fmt.Println(pu)
    fmt.Println(reflect.TypeOf(pu))

    pu.name = "Robert Roe"
    pu.occupation = "accountant"
    fmt.Println(pu)
}

在代码示例中,我们使用new关键字创建了一个用户。

$ go run newkey.go 
&{ }
*main.User
&{Robert Roe accountant}

将指针指向指针

一个指针可以指向另一个指针。要取消引用此类指针的值,我们使用**字符。

package main

import "fmt"

func main() {

    var a = 7
    var p = &a
    var pp = &p

    fmt.Println(a)
    fmt.Println(&a)

    fmt.Println("--------------------")

    fmt.Println(p)
    fmt.Println(&p)

    fmt.Println("--------------------")

    fmt.Println(pp)
    fmt.Println(&pp)

    fmt.Println("--------------------")

    fmt.Println(*pp)
    fmt.Println(**pp)
}

该示例创建一个指向另一个指针p的指针pp

$ go run pointer2pointer.go 
7
0xc0000140f8
--------------------
0xc0000140f8
0xc00000e028
--------------------
0xc00000e028
0xc00000e030
--------------------
0xc0000140f8
7

在本教程中,我们介绍了Go指针。

列出所有Go教程。

未经允许不得转载:我爱分享网 » 如何在Golang语言中使用指针

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏