亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

理解Golang中的數組(array)、切片(slice)和map

2020-04-01 19:24:07
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了理解Golang中的數組(array)、切片(slice)和map,本文先是給出代碼,然后一一分解,并給出一張內圖加深理解,需要的朋友可以參考下
 

我比較喜歡先給出代碼,然后得出結論

數組

 

復制代碼代碼如下:

package main

 

import (
    "fmt"
)

func main() {
    arr := [...]int{1, 2, 3}
    //打印初始的指針
    fmt.Printf("the pointer is : %p /n", &arr)
    printPointer(arr)
}

func printPointer(any interface{}) {
    fmt.Printf("the pointer is : %p /n", &any)
}

 

結果

 

復制代碼代碼如下:

1 the pointer is : 0xc082008580 
2 the pointer is : 0xc0820001d0 

 

切片

 

復制代碼代碼如下:

package main

 

import (
    "fmt"
)

func main() {
    arr := make([]int, 3)
    //打印初始的指針
    fmt.Printf("the pointer is : %p /n", arr)
    printPointer(arr)
}

func printPointer(any interface{}) {
    fmt.Printf("the pointer is : %p /n", any)
}

 

結果

 

復制代碼代碼如下:

1 the pointer is : 0xc082008580 
2 the pointer is : 0xc082008580 

 

map

 

復制代碼代碼如下:

package main

 

import (
    "fmt"
)

func main() {
    arr := make(map[int]string)
    //arr := [3]int{1, 2, 3}
    //打印初始的指針
    fmt.Printf("the pointer is : %p /n", arr)
    printPointer(arr)
}

func printPointer(any interface{}) {
    fmt.Printf("the pointer is : %p /n", any)
}

 

運行結果

 

復制代碼代碼如下:

1 the pointer is : 0xc082007c80 
2 the pointer is : 0xc082007c80 

 

由此,我們看到數組本身傳過去的是值,傳到函數之后,被開辟了另外一個空間。

因為數組就是他本身。這一句好像不太好理解。

這是切片 arr := make([]int, 3)  而arr 本身不是一個數組,至少不是我們所想要的指向的一個數組。只是arr里有一個地址指向數組。

這么舉個例子:

arr := [...]int{1,2,3,4,5} 這是一個數組,懂得go語言的都明白。  arr本身就是數組

arrSlice := arr[0:5]  這是一個切片。 打印所得的值是一樣的,和上面。  arrSlice本身不是數組,只是arrSlice本身有一個值是指向arr的指針。

切片是指一個結構體,大體結構像這樣:

 

復制代碼代碼如下:

struct slice{
     ptr *Elem
    len int
    cap int
 }

 

也就是說,上面的arrSlice其實是一個結構體。里面有一個屬性 ptr指向數組 arr

其實arrSlice也是傳到函數里,也是進行了復制。但是盡管傳過去是一個復制的結構體,他的屬性ptr,沒有變。還是一個指向原數組的指針。

下面的例子見證他自己傳過去,是一個復制的過程:

 

復制代碼代碼如下:

package main

 

import (
    "fmt"
)

func main() {
    arrSlice := make([]int, 4)
    fmt.Printf("the pointer is : %p /n", arrSlice)
    fmt.Printf("the pointer is : %p /n", &arrSlice) //這是arrSlice本身的指針,也就是結構體的指針
    printPointer(arrSlice)
}

func printPointer(any interface{}) {
    fmt.Printf("the pointer is : %p /n", any) 
    fmt.Printf("the pointer is : %p /n", &any) //打印傳過來的結構體arrSlice的指針
}

 

看結果:

 

復制代碼代碼如下:

the pointer is : 0xc0820085a0 
the pointer is : 0xc082008580 
the pointer is : 0xc0820085a0 
the pointer is : 0xc0820001d0 

 

第1、3個的打印是打印這個結構體的ptr屬性,也就是指向數組的指針。

其實這個結構體傳到函數里,是一個復制的過程,第2、4的指針不一樣。

大家在對照下面的圖片理解一下:

理解Golang中的數組(array)、切片(slice)和map


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av片永久免费网站| 国产精品91视频| 亚洲第一男人天堂| 国产精品白嫩初高中害羞小美女| 日韩激情视频在线播放| 中文字幕精品一区久久久久| 国产成人午夜视频网址| 91精品国产自产在线| 中文字幕国产日韩| 亚洲美女又黄又爽在线观看| 国产精品高潮呻吟视频| 亚洲无av在线中文字幕| 国产福利精品在线| 亚洲人成电影网站色xx| 国模极品一区二区三区| 2019av中文字幕| 成人激情黄色网| 欧美激情在线有限公司| 国产精品最新在线观看| 亚洲男人天堂九九视频| 揄拍成人国产精品视频| 日韩69视频在线观看| 久久电影一区二区| 欧美精品电影在线| 国产偷国产偷亚洲清高网站| 亚洲日韩欧美视频| 日韩精品视频三区| 日韩av片永久免费网站| 亚洲加勒比久久88色综合| 欧洲永久精品大片ww免费漫画| 国产精品久久精品| 97视频免费看| 亚洲午夜精品久久久久久久久久久久| wwwwwwww亚洲| 久久国产精品久久久久| 欧美日韩aaaa| 在线观看欧美日韩| 亚洲欧美日韩一区二区三区在线| 亚洲综合在线做性| 九九热精品在线| 人人做人人澡人人爽欧美| 日韩精品在线视频| 久久久久久久国产| 亚洲欧美在线免费| 欧美国产日本高清在线| 成人啪啪免费看| 91精品国产色综合久久不卡98| 久久亚洲影音av资源网| 国产成人精品日本亚洲专区61| 欧美成人午夜激情| 国产欧美在线看| 亚洲欧洲午夜一线一品| 在线视频国产日韩| 日韩在线观看视频免费| 欧美黑人一级爽快片淫片高清| 亚洲黄一区二区| 欧美在线www| 最近2019年手机中文字幕| 人妖精品videosex性欧美| 97精品在线视频| 57pao成人国产永久免费| 中文国产成人精品久久一| 亚洲一区二区三区久久| 欧美有码在线观看视频| 正在播放欧美一区| 日韩av网站大全| 欧美综合在线观看| 色婷婷av一区二区三区久久| 国产精品久久久久9999| 亚洲人成网7777777国产| 亚洲a级在线播放观看| 日韩电影大片中文字幕| 国产丝袜视频一区| 91禁国产网站| 日韩有码片在线观看| 一本大道久久加勒比香蕉| 欧美日韩另类在线| 日韩国产欧美区| 91在线看www| 亚洲欧美变态国产另类| 国产97在线播放| 欧美午夜性色大片在线观看| 欧美中文字幕在线播放| 日韩av免费网站| 中文字幕亚洲一区| 国产精品久久久久久久久久久久| 中文字幕久热精品在线视频| 日韩风俗一区 二区| 中文字幕综合一区| 久久亚洲精品网站| 尤物九九久久国产精品的分类| 一区二区三区亚洲| 日韩av免费在线观看| 日韩精品亚洲元码| 欧美高清一级大片| 亚洲缚视频在线观看| 日本亚洲欧洲色α| 欧美一级大胆视频| 久久久久亚洲精品成人网小说| 国产精品91一区| 国产精品96久久久久久| 国产精品看片资源| 亚洲黄页视频免费观看| 午夜精品久久久久久久99热浪潮| 国产精品扒开腿做爽爽爽男男| 亚洲成人动漫在线播放| 亚洲精品成人免费| 日韩av影院在线观看| 夜夜嗨av一区二区三区免费区| 国产精品99一区| 日韩一级裸体免费视频| 精品国产一区二区三区久久狼黑人| 亚洲国产99精品国自产| 欧美猛男性生活免费| 国产精品狼人色视频一区| 国产欧美va欧美va香蕉在| 国产精品美女999| 2018日韩中文字幕| 亚洲欧洲在线播放| 欧美日产国产成人免费图片| 国产精品6699| 日韩精品电影网| 欧美一级淫片aaaaaaa视频| 午夜精品久久久久久久久久久久久| 日韩中文字幕在线视频播放| 中文字幕一区日韩电影| 亚洲精品v欧美精品v日韩精品| 91久久精品国产91久久性色| 26uuu另类亚洲欧美日本一| 日韩经典中文字幕| 国产偷国产偷亚洲清高网站| 国产精品高潮呻吟视频| 国产一区二区三区欧美| 久久成年人免费电影| 国产精品夜色7777狼人| 国产在线久久久| 91成人在线视频| 国产精品a久久久久久| 97久久精品在线| 3344国产精品免费看| 这里只有视频精品| 精品调教chinesegay| 日韩精品小视频| 国产日本欧美视频| www.亚洲成人| 欧美高清自拍一区| 国产成人涩涩涩视频在线观看| 69久久夜色精品国产69乱青草| 久久成人精品电影| 九九热r在线视频精品| 激情成人中文字幕| 一区二区三区视频免费在线观看| 国产丝袜高跟一区| 亚洲人成电影网站色xx| 色哟哟亚洲精品一区二区| 精品视频一区在线视频| 欧美色另类天堂2015| 夜夜嗨av色综合久久久综合网| 国产精品一区二区在线| 日本免费一区二区三区视频观看| www.日韩系列| 欧美日韩激情小视频| 精品久久中文字幕久久av| 国产午夜精品免费一区二区三区|