golang有指標麼

2022-11-23 14:00:54

golang有指標。Go語言為程式設計師提供了控制資料結構指標的能力,其對指標的支援介於Java語言和C/C++語言之間,它既沒有像Java那樣取消了程式碼對指標的直接操作的能力,也避免了C/C++中由於對指標的濫用而造成的安全和可靠性問題。指標在Go語言中可被拆分為兩個核心概念:1、型別指標,允許對這個指標型別的資料進行修改;2、切片,由指向起始元素的原始指標、元素數量和容量組成。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境: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有指標麼的詳細內容,更多請關注TW511.COM其它相關文章!