golang有指標。 Go語言為程式設計師提供了控制資料結構指標的能力,其對指標的支援介於Java語言和C/C 語言之間,它既沒有像Java那樣取消了程式碼對指標的直接操作的能力,也避免了C/C 中由於對指針的濫用而造成的安全和可靠性問題。指針在Go語言中可被拆分為兩個核心概念:1、類型指針,允許對這個指針類型的資料進行修改;2、切片,由指向起始元素的原始指針、元素數量和容量組成。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
與 Java 和 .NET 等程式語言不同,Go語言為程式設計師提供了控制資料結構指標的能力,但是,並不能進行指標運算。 Go語言允許你控制特定集合的資料結構、分配的數量以及記憶體存取模式,這對於建立運作良好的系統是非常重要的。指針對於效能的影響不言而喻,如果你想要做系統程式設計、作業系統或網路應用,指標更是不可或缺的一部分。
Go語言對指標的支援介於Java語言和C/C 語言之間,它既沒有像Java那樣取消了程式碼對指標的直接操作的能力,也避免了C/C 中由於對指針的濫用所造成的安全和可靠性問題。
指標(pointer)在Go語言中可以被分割為兩個核心概念:
類型指針,允許對這個指標類型的數據進行修改,傳遞數據可以直接使用指針,而無須拷貝數據,類型指針不能進行偏移和運算。
切片,由指向起始元素的原始指標、元素數量和容量組成。
受益於這樣的約束和拆分,Go語言的指標類型變數即擁有指標高效存取的特點,又不會發生指標偏移,從而避免了非法修改關鍵性數據的問題。同時,垃圾回收也比較容易對不會發生偏移的指標進行檢索和回收。
切片比原始指標具備更強大的特性,而且更為安全。切片在發生越界時,運作時會報出宕機,並打出堆疊,而原始指標只會崩潰。
golang中什麼是指標?
指標是一個變量,其值是另一個變數的位址,即記憶體位置的直接位址。類似變數或常數一樣,必須先宣告一個指針,然後才能使用它來儲存任何變數位址。指標變數宣告的一般形式是:
var var-name *var-type
這裡,var-type是指標的基底類型; 它必須是有效的Go資料型別,var-name是指標變數的名稱。用來宣告指標的星號(*)與用於乘法的星號相同。但是,在此語句中,星號(*)用於將變數指定為指標。以下是有效的指標宣告:
var ip *int /* pointer to an integer */ var fp *float32 /* pointer to a float */
所有指標的值的實際資料型別(無論是整數,浮點數或其他資料型別)都是相同的,它表示記憶體位址的長十六進位數。不同資料類型的指標的唯一差異是指標所指向的是變數或常數的資料類型。 【相關推薦:Go影片教學】
如何使用指標?
有幾個重要的操作,將非常頻繁地使用指標來實現。
定義一個指標變數
將一個變數的位址賦值給一個指標
最後存取指標變數中可用位址的值
這是透過使用一元運算子*
來傳回位於運算元指定的位址的變數的值。下面的範例使用這些操作:
package main import "fmt" func main() { var a int= 20 /* actual variable declaration */ var ip *int /* pointer variable declaration */ ip = &a /* store address of a in pointer variable*/ fmt.Printf("Address of a variable: %x\n", &a ) /* address stored in pointer variable */ fmt.Printf("Address stored in ip variable: %x\n", ip ) /* access the value using the pointer */ fmt.Printf("Value of *ip variable: %d\n", *ip ) }
當上面的程式碼編譯和執行時,它產生結果如下:
Address of var variable: 10328000 Address stored in ip variable: 10328000 Value of *ip variable: 20
在Go語言中的nil指標
Go編譯器為指標變數指派一個Nil
值,以防指標沒有確切的位址分配。這是在變數宣告的時候完成的。指定為nil
值的指標稱為nil指標。
nil
指標是在幾個標準函式庫中定義的值為零的常數。參考下面的程式:
package main import "fmt" func main() { var ptr *int fmt.Printf("The value of ptr is : %x\n", ptr ) }
當上面的程式碼編譯和執行時,它產生結果如下:
The value of ptr is 0
在大多數作業系統上,程式不允許存取位址0
處的內存,因為該內存是由作業系統保留的。然而,記憶體位址0
具有特殊意義;它表示指標不打算指向可存取的記憶體位置。但是按照慣例,如果指標包含nil
(零)值,則假設它不指向任何東西。
要檢查是否為nil
指針,可以使用if
語句,如下所示:
if(ptr != nil) /* succeeds if p is not nil */ if(ptr == nil) /* succeeds if p is null */
更多程式相關知識,請造訪: 程式設計影片! !
以上是golang有指針麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!