Go 以範例說明:指標

Go 支援指標,讓您可以傳遞程式中的值和記錄的參照。

package main
import "fmt"

我們會透過 2 個函數來顯示指標的工作方式,同時與值進行對比:zerovalzeroptrzeroval 有個 int 參數,因此引數會以值傳遞給它。zeroval 會取得一個與呼叫函數中的 ival 不同的拷貝。

func zeroval(ival int) {
    ival = 0
}

相對地,zeroptr 有個 *int 參數,表示它接受一個 int 指標。函數本體中的 *iptr 程式碼會取消參考指標,從其記憶體位址到該位址上的目前值。將值指定給已取消參考的指標會變更被參照位址上的值。

func zeroptr(iptr *int) {
    *iptr = 0
}
func main() {
    i := 1
    fmt.Println("initial:", i)
    zeroval(i)
    fmt.Println("zeroval:", i)

&i 語法會提供 i 的記憶體位址,也就是說一個指向 i 的指標。

    zeroptr(&i)
    fmt.Println("zeroptr:", i)

也可列印指標。

    fmt.Println("pointer:", &i)
}

zeroval 沒有變更 main 中的 i,但 zeroptr 有,因為它參照了該變數的記憶體位址。

$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100

下一個範例:字串和符文