簡而言之去指針

指針不是Go所獨有的,但是Go具有獨特的指針風格,因此最好學習它們為何獨特的原因,因為您將在每個Go程序中使用指針。

為什麼要使用指針?

Go中的所有內容都是按價值傳遞的,就像C以及所有源自C的語言。

如果將Int傳遞給函數,則將復制變量。

如果傳遞指針,則會復制該指針,但是不是它指向的值。

因此,在大多數情況下,指針用於調用函數並通過引用傳遞參數。

一個例子

我們來看一個簡單的變量x,定義為帶值的整數5

x := 5

現在,內存地址x可以用&x

如果您打印&xfmt.Println,您會看到類似0xc42000e248:一個內存地址。

現在,我們可以將此值分配給一個變量,該變量將是一個指向x

y := &x

如果我們寫這個賦值語句

*y = 10

x現在的價值將是10

無指針算法

Go指針類似於C和C ++指針,但是它們更安全,因為您無法執行類似

var x *int;
x++;

在指針上,因為不能更改指針的地址。沒有指針/數組對偶。

返回局部函數變量的指針

當指針可用時,返回的指針引用的局部函數變量將保持可用。這將確保指針始終指向您的想法。

無指針

指針的零值為nil。這意味著仍然可以使用nil指針,但是與其他語言(C,Java,C ++)相比,這導致的問題更少,因為被掩蓋的類型更少,而其他nil也更少。例如,C中的字符串是指針。在Go中,它們是一種類型。

nil對於函數而言,這不是常見的返回結果,例如在單個返回值語言中—錯誤檢查更加有條理,並且nil不是常見的零值。許多內置數據類型(字符串,數組,映射,切片..)的零值不同於nil

參考


更多教程: