初識Golang Golang中的指標介紹

2021-10-24 14:34:07 字數 1519 閱讀 3067

指標這一塊,是每個學過c語言的人怎麼繞都繞不過的檻。這一篇盡量以白話的語言簡單介紹下指標的概念,同時演示下如何在golang中使用它,如果想直接看**操作,可跳過前面介紹。

c語言真正的大boss是指標。想當年我剛剛接觸這個的時候很懵,經常乙個&、*符號,搞得我手無足措。後面查了挺多資料也理解了,也是這麼回事。

扯了幾句,進入正題。

指標可以看成是乙個指路牌。比如我們在高速公路上是經常會看到某某城市在哪個方向,這裡就相當於乙個指標,它告訴我們所要去目的地的方向。還有去開會時,我們也總要知道在哪個會議室開會吧?要怎麼走吧?這裡也需要乙個指標來告訴我們怎麼去。

而在程式中,程式語言會有值型別(基本資料型別)與引用型別。而指標就是引用型別的一種。c語言如此,golang也是。下面說說兩者的記憶體結構就一目了然了。

普通的值型別:

我們平時在**中宣告乙個普通變數時,是直接在記憶體(棧)中進行分配。如圖宣告i = 10,先在記憶體中開闢乙個空間,裡面存放10這個資料,然後再將變數i指向它。

這裡變數i就相當於一把鑰匙,通過它就可以找到儲存資料為10的區域了:

我們知道程式都是執行在記憶體中的,那執行過程中程式需要往記憶體中找它要的值(如變數i)咋辦?答案是記憶體位址。變數i也有它對應的記憶體位址。這裡假定i的記憶體位址為0x0001。

而指標也是類似,不同的是,指標是指向乙個記憶體位址,通過這個記憶體位址再找到對應的區域。

終於到了編碼階段,畢竟是golang專欄,就用它來舉例吧,這裡就舉個簡單的例子。

package main

import

("fmt"

)func

main()

這裡一一說明下。

首先先定義乙個變數i,初始值為10.並且使用&i輸出它的記憶體位址。

然後定義乙個指標變數ptr(*ptr)指向變數i的記憶體位址&i。並且輸出看看兩者是否一樣。

使用*ptr顯示指標變數所操作的值為9(就是上文說的所對應的記憶體區域)。

修改記憶體區域並輸出

輸出結果:

可以看到兩者的記憶體位址一致,並且修改操作值成功。

這裡總結一下:

Golang golang中自動鎖的實現

golang作為原生支援多執行緒的語言,為了實現執行緒安全的package,經常需要對全域性變數自動加鎖,以便安全的訪問全域性變數。廢話不多說,直接上 package mainimport sync fmt type autolock struct locksync.mutex func me au...

Golang golang文字處理

golang文字字串操作 包含 合併 連線 分割 取索引 字首字尾檢測 消除字串 消除空格 golang字串操作需要用到 strings這個包 str hello world 是否包含找的字串 fmt.println strings.contains str,hel strings.contains...

Golang Golang輕量級框架Gin

簡介 gin是一款輕量級golang框架,他在go web開發中使用率是很高的。gin框架特點 1.使用簡單。2.併發高。3.記憶體占用少。下圖是各個web框架壓測對比,吞吐量越高越好。gin框架安裝 安裝要求 go版本大於等於1.12 使用go module 下面開始安裝 建立專案目錄 進入上面建...