在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ GO/ Go語言指針
Go panic錯(cuò)誤處理實(shí)例
Go命令行參數(shù)實(shí)例
Go可變參數(shù)的函數(shù)實(shí)例
Go通道同步實(shí)例
Go非阻塞通道操作實(shí)例
Go指針實(shí)例
Go數(shù)字解析實(shí)例
Go語言指針
Go超時(shí)(timeouts)實(shí)例
Go速率限制實(shí)例
Go信號(hào)實(shí)例
Go Base64編碼實(shí)例
Go計(jì)時(shí)器實(shí)例
Go命令行標(biāo)志實(shí)例
Go原子計(jì)數(shù)器實(shí)例
Go語言切片
Go隨機(jī)數(shù)實(shí)例
Go語言類型轉(zhuǎn)換
Go排序?qū)嵗?/span>
Go時(shí)間格式化/解析實(shí)例
Go URL解析實(shí)例
Go字符串函數(shù)實(shí)例
Go語言常量
Go for循環(huán)語句實(shí)例
Go函數(shù)多個(gè)返回值實(shí)例
Go切片實(shí)例
Go行過濾器實(shí)例
Go語言接口
Go語言數(shù)組
Go語言變量
Go字符串格式化實(shí)例
Go斷續(xù)器實(shí)例
Go if/else語句實(shí)例
Go通道緩沖實(shí)例
Go錯(cuò)誤實(shí)例
Go語言映射
Go執(zhí)行過程實(shí)例
Go函數(shù)實(shí)例
Go有狀態(tài)的goroutines實(shí)例
Go按自定義函數(shù)排序?qū)嵗?/span>
Go語言作用域規(guī)則
Go時(shí)代(Epoch)實(shí)例
Go變量實(shí)例
Go互斥體實(shí)例
Go語言范圍(range)
Go程序?qū)嵗?/span>
Go語言入門
Go通道路線實(shí)例
Go閉包(匿名函數(shù))實(shí)例
Go Select實(shí)例
Go通道范圍實(shí)例
Go集合函數(shù)實(shí)例
Hello World程序?qū)嵗?/span>
Go環(huán)境變量實(shí)例
Go語言運(yùn)算符
Go讀取文件實(shí)例
Go延遲(defer)實(shí)例
Go SHA1哈希實(shí)例
Go語言條件和決策
Go語言錯(cuò)誤處理
Go通道實(shí)例
Go指針實(shí)例
Go時(shí)間日期實(shí)例
Go語言字符串
Go語言循環(huán)
Go語言基礎(chǔ)語法
Go語言開發(fā)環(huán)境安裝配置
Go常量實(shí)例
Go語言結(jié)構(gòu)體
Go寫文件實(shí)例
Go正則表達(dá)式實(shí)例
Go JSON實(shí)例
Go語言教程
Go關(guān)閉通道實(shí)例
Go接口實(shí)例
Go語言遞歸
Go switch語句實(shí)例
Go函數(shù)遞歸實(shí)例
Go退出程序?qū)嵗?/span>
Go語言程序結(jié)構(gòu)
Go范圍實(shí)例
Go語言函數(shù)
Go工作池實(shí)例
Go語言數(shù)據(jù)類型

Go語言指針

Go中的指針是很容易學(xué)習(xí),也是比較有趣的。一些Go編程任務(wù)使用指針更容易執(zhí)行,并且不使用指針不能執(zhí)行其他任務(wù),例如通過引用調(diào)用。 因此,有必要學(xué)習(xí)指針,成為一個(gè)完美的Go程序員?,F(xiàn)在我們開始通過簡單和容易的步驟來學(xué)習(xí)Go編程中的指針。

如眾所知,每個(gè)變量都是一個(gè)內(nèi)存位置,每個(gè)內(nèi)存位置都有其定義的地址,可以使用”和”號(hào)(&)運(yùn)算符來訪問它,這個(gè)運(yùn)算符表示內(nèi)存中的地址。參考下面的例子,它將打印定義的變量的地址:

package main

import "fmt"

func main() {
   var a int = 10   

   fmt.Printf("Address of a variable: %x\n", &a  )
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它產(chǎn)生結(jié)果如下:

Address of a variable: 10328000

所以要明白什么是內(nèi)存地址,以及如何訪問它,基礎(chǔ)的概念講到這里就結(jié)束了。現(xiàn)在讓我們看看什么是指針。

什么是指針?

指針是一個(gè)變量,其值是另一個(gè)變量的地址,即存儲(chǔ)器位置的直接地址。類似變量或常量一樣,必須要先聲明一個(gè)指針,然后才能使用它來存儲(chǔ)任何變量地址。指針變量聲明的一般形式是:

var var-name *var-type

這里,var-type是指針的基類型; 它必須是有效的Go數(shù)據(jù)類型,var-name是指針變量的名稱。用于聲明指針的星號(hào)(*)與用于乘法的星號(hào)相同。但是,在此語句中,星號(hào)(*)用于將變量指定為指針。以下是有效的指針聲明:

var ip *int        /* pointer to an integer */
var fp *float32    /* pointer to a float */

所有指針的值的實(shí)際數(shù)據(jù)類型(無論是整數(shù),浮點(diǎn)數(shù)還是其他數(shù)據(jù)類型)都是相同的,它表示內(nèi)存地址的長十六進(jìn)制數(shù)。不同數(shù)據(jù)類型的指針的唯一區(qū)別是指針?biāo)赶虻氖亲兞炕虺A康臄?shù)據(jù)類型。

如何使用指針?

有幾個(gè)重要的操作,將非常頻繁地使用指針來實(shí)現(xiàn)。

  • 定義一個(gè)指針變量
  • 將一個(gè)變量的地址賦值給一個(gè)指針
  • 最后訪問指針變量中可用地址的值

這是通過使用一元運(yùn)算符*來返回位于操作數(shù)指定的地址的變量的值。下面的例子使用這些操作:

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 )
}

當(dāng)上面的代碼編譯和執(zhí)行時(shí),它產(chǎn)生結(jié)果如下:

Address of var variable: 10328000
Address stored in ip variable: 10328000
Value of *ip variable: 20

在Go語言中的nil指針

Go編譯器為指針變量分配一個(gè)Nil值,以防指針沒有確切的地址分配。這是在變量聲明的時(shí)候完成的。指定為nil值的指針稱為nil指針。

nil指針是在幾個(gè)標(biāo)準(zhǔn)庫中定義的值為零的常量。參考下面的程序:

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("The value of ptr is : %x\n", ptr  )
}

當(dāng)上面的代碼編譯和執(zhí)行時(shí),它產(chǎn)生結(jié)果如下:

The value of ptr is 0

在大多數(shù)操作系統(tǒng)上,程序不允許訪問地址0處的內(nèi)存,因?yàn)樵搩?nèi)存是由操作系統(tǒng)保留的。 然而,存儲(chǔ)器地址0具有特殊意義; 它表示指針不打算指向可訪問的存儲(chǔ)器位置。但是按照慣例,如果指針包含nil(零)值,則假設(shè)它不指向任何東西。

要檢查是否為nil指針,可以使用if語句,如下所示:

if(ptr != nil)     /* succeeds if p is not nil */
if(ptr == nil)    /* succeeds if p is null */

有關(guān)指針的詳細(xì)信息

指針有很多但很簡單的概念,它們對Go編程非常重要。下面幾個(gè)重要的指針概念,對于Go程序員應(yīng)該要清楚:

概念 描述
Go指針數(shù)組 可以定義數(shù)組來保存一些指針
Go指針的指針 Go允許有指針指向指針等等
傳遞指針到函數(shù) 通過引用或地址傳遞參數(shù)都允許被調(diào)用函數(shù)在調(diào)用函數(shù)中更改傳遞的參數(shù)。