最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解go中的引用類型

 更新時間:2020年03月15日 14:50:31   作者:Jokcy ·  
這篇文章主要介紹了go中的引用類型,文中給大家提到了值類型和引用類型的區(qū)別,通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

值類型和引用類型

值類型:int、float、bool和string這些類型都屬于值類型,使用這些類型的變量直接指向存在內(nèi)存中的值,值類型的變量的值存儲在棧中。當(dāng)使用等號=將一個變量的值賦給另一個變量時,如 j = i ,實際上是在內(nèi)存中將 i 的值進行了拷貝??梢酝ㄟ^ &i 獲取變量 i 的內(nèi)存地址。  值拷貝

引用類型:特指slice、map、channel這三種預(yù)定義類型。引用類型擁有更復(fù)雜的存儲結(jié)構(gòu):(1)分配內(nèi)存 (2)初始化一系列屬性等一個引用類型的變量r1存儲的是r1的值所在的內(nèi)存地址(數(shù)字),或內(nèi)存地址中第一個字所在的位置,這個內(nèi)存地址被稱之為指針,這個指針實際上也被存在另外的某一個字中。 

兩者的主要區(qū)別:拷貝操作和函數(shù)傳參。

正文開始重點給大家介紹go中的引用類型。

首先,go中的賦值,都是值傳遞

a := 1
b := a

x := Struct{}
y := x

他們都是在內(nèi)存中有獨立空間的,也就是 copy 的過程,所以這里對y的某個屬性的改動,并不會影響x

那么我們要讓兩個變量指向同一個內(nèi)存怎么辦呢,可以使用引用類型:

y := &x

這時候,y的類型是 *Struct ,這時候我們可以對y進行修改,修改完之后,x也會發(fā)現(xiàn)變化,因為y現(xiàn)在是一個引用類型,他指向的是x結(jié)構(gòu)體所在的內(nèi)存

我們可以通過:

y.variable = xxx

來直接調(diào)用引用類型的結(jié)構(gòu)體賦值,但是要注意的是,這是go的語法糖,他只是幫助我們簡化了通過指針來獲取實際內(nèi)存的過程,完整的寫法應(yīng)該是這樣的:

(*y).variable = xxx

*y 是對指針的反引用,可以理解為 *y == x 。

為什么設(shè)計這個語法糖呢,是因為在go里面我們是無法直接操作指針,像c++中直接對內(nèi)存地址進行計算進而得到其他內(nèi)存地址的運算,在go里面是默認不支持的

print(y) // 得到類似0x8123這樣的內(nèi)存地址數(shù)據(jù)

// 理論上可以得到一個新的內(nèi)存地址,但是在go里默認是不支持的
newAddr := y + 4

因為無法直接操作地址,所以go就提供語法糖,讓我們在使用引用類型進行操作的時候,默認就是對引用所指向的內(nèi)存地址進行操作。

注意我們是可以對引用類型直接賦值的,但是賦值的類型也必須是引用類型

y = &Struct{} // 這樣是可以的,但是不能是y = Struct{}

a := 1
b := &a
b = 2  // 這是不行的,因為b的類型是 *int

特殊的引用類型

能夠通過 make() 函數(shù)創(chuàng)建的都是引用類型,比如 slice 和 map , slice 雖然看起來像數(shù)組,但是他其實是一個指向數(shù)組內(nèi)存空間的一個指針類型

type Slice struct {
 point Point // 內(nèi)存地址
 len int
 cap int
}

所以我們在執(zhí)行:

a := []int
b = a

會發(fā)現(xiàn),好像b和a指向的是同一個數(shù)組,事實確實如此。 go中所有的賦值都是值傳遞,而slice的賦值,也是對slice對象的一次拷貝,也就是說a和b是不同的slice對象,但是他們指向同一個數(shù)組

同理map也是如此,就不多講來。

總結(jié)

到此這篇關(guān)于詳解go中的引用類型的文章就介紹到這了,更多相關(guān)go中的引用類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go使用database/sql操作數(shù)據(jù)庫的教程指南

    Go使用database/sql操作數(shù)據(jù)庫的教程指南

    Go?語言中,有一個名為database/sql的標(biāo)準(zhǔn)庫,提供了統(tǒng)一的編程接口,使開發(fā)人員能夠以一種通用的方式與各種關(guān)系型數(shù)據(jù)庫進行交互,本文就來和大家講講它的具體操作吧
    2023-06-06
  • go語言中數(shù)據(jù)接口set集合的實現(xiàn)

    go語言中數(shù)據(jù)接口set集合的實現(xiàn)

    set集合是一種常見的數(shù)據(jù)結(jié)構(gòu),它代表了一個唯一元素的集合,本文主要介紹了set的基本特性,包括唯一性、無序性、可變性和集合運算,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 探究gRPC?客戶端調(diào)用服務(wù)端需要連接池嗎?

    探究gRPC?客戶端調(diào)用服務(wù)端需要連接池嗎?

    這篇文章主要為大家介紹了gRPC?客戶端調(diào)用服務(wù)端需要連接池嗎的問題探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)

    Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)

    這篇文章主要介紹了Go語言開發(fā)區(qū)塊鏈只需180行代碼,文章中將不會涉及工作量證明算法(PoW)以及權(quán)益證明算法(PoS)這類的共識算法。需要的朋友可以參考下
    2018-05-05
  • 基于golang編寫一個word/excel/ppt轉(zhuǎn)pdf的工具

    基于golang編寫一個word/excel/ppt轉(zhuǎn)pdf的工具

    這篇文章主要為大家詳細介紹了如何基于golang編寫一個word/excel/ppt轉(zhuǎn)pdf的工具,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-11-11
  • Golang基于文件魔數(shù)判斷文件類型的案例代碼

    Golang基于文件魔數(shù)判斷文件類型的案例代碼

    這篇文章主要介紹了Golang基于文件魔數(shù)判斷文件類型,本文介紹了基于文件魔數(shù)判斷文件類型的方法,主要涉及如何ReadSeek讀取文件指定字節(jié)內(nèi)容,然后介紹文件魔數(shù),最后給出示例基于魔數(shù)判斷文件類型,需要的朋友可以參考下
    2023-02-02
  • Go語言如何利用Mutex保障數(shù)據(jù)讀寫正確

    Go語言如何利用Mutex保障數(shù)據(jù)讀寫正確

    這篇文章主要介紹了互斥鎖的實現(xiàn)機制,以及?Go?標(biāo)準(zhǔn)庫的互斥鎖?Mutex?的基本使用方法,文中的示例代碼講解詳細,需要的小伙伴可以參考一下
    2023-05-05
  • 淺談Golang中創(chuàng)建一個簡單的服務(wù)器的方法

    淺談Golang中創(chuàng)建一個簡單的服務(wù)器的方法

    這篇文章主要介紹了淺談Golang中創(chuàng)建一個簡單的服務(wù)器的方法,golang中的net/http包對網(wǎng)絡(luò)的支持非常好,這樣會讓我們比較容易的建立起一個相對簡單的服務(wù)器,有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Go中strings的常用方法詳解

    Go中strings的常用方法詳解

    這篇文章主要介紹了Go中strings的常用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • GoLang中socket心跳檢測的實現(xiàn)

    GoLang中socket心跳檢測的實現(xiàn)

    本文主要介紹了GoLang中socket心跳檢測的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02

最新評論

通榆县| 泰安市| 平泉县| 成安县| 定州市| 贵州省| 石城县| 濉溪县| 灌南县| 思南县| 吉林省| 江油市| 凌海市| 绥宁县| 东乡| 石屏县| 建湖县| 旬邑县| 明光市| 绥阳县| 辽阳县| 鄱阳县| 井陉县| 利津县| 博野县| 海宁市| 郑州市| 安岳县| 高雄市| 张北县| 霍林郭勒市| 牙克石市| 随州市| 巍山| 夏邑县| 东莞市| 大邑县| 武威市| 民乐县| 泽普县| 施甸县|