偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go語(yǔ)言中的_array、slice和map

開(kāi)發(fā) 開(kāi)發(fā)工具
這次還是要說(shuō)說(shuō)array,slice,map。雖然前面已經(jīng)說(shuō)過(guò)了,但是實(shí)際使用中發(fā)現(xiàn)對(duì)這幾個(gè)的使用和理解還是不夠詳細(xì)。

首先慶祝下golang終于通過(guò)了gfw的審核,可以不用翻墻訪問(wèn)了。goer就可以光明正大地訪問(wèn)http://golang.org/

這次還是要說(shuō)說(shuō)array,slice,map。雖然前面已經(jīng)說(shuō)過(guò)了,但是實(shí)際使用中發(fā)現(xiàn)對(duì)這幾個(gè)的使用和理解還是不夠詳細(xì)

現(xiàn)在再重新看看這幾個(gè)類(lèi)型

array類(lèi)型

array是固定長(zhǎng)度的數(shù)組,這個(gè)和C語(yǔ)言中的數(shù)組是一樣的,使用前必須確定數(shù)組長(zhǎng)度。但是和C中的數(shù)組相比,又是有一些不同的:

 

1 Go中的數(shù)組是值類(lèi)型,換句話(huà)說(shuō),如果你將一個(gè)數(shù)組賦值給另外一個(gè)數(shù)組,那么,實(shí)際上就是將整個(gè)數(shù)組拷貝一份

2 如果Go中的數(shù)組作為函數(shù)的參數(shù),那么實(shí)際傳遞的參數(shù)是一份數(shù)組的拷貝,而不是數(shù)組的指針。這個(gè)和C要區(qū)分開(kāi)。因此,在Go中如果將數(shù)組作為函數(shù)的參數(shù)傳遞的話(huà),那效率就肯定沒(méi)有傳遞指針高了。這個(gè)是不是有點(diǎn)陷阱的感覺(jué)?

3 array的長(zhǎng)度也是Type的一部分,這樣就說(shuō)明[10]int和[20]int是不一樣的。

array的結(jié)構(gòu)用圖示表示是這樣的:

clip_image001

len表示數(shù)組的長(zhǎng)度,后面的int儲(chǔ)存的是實(shí)際數(shù)據(jù)

slice類(lèi)型

看看Effective Go是怎么夸贊slice的:

clip_image002

Slice是Go程序中最常用的表示序列數(shù)組的類(lèi)型。為什么最經(jīng)常用它呢?

1 slice是可變長(zhǎng)的

定義完一個(gè)slice變量之后,不需要為它的容量而擔(dān)心,你隨時(shí)可以往slice里面加數(shù)據(jù)

比如:

v:=[]string{}

v=append(v, "hello")

這里附帶說(shuō)一下,slice和array的寫(xiě)法很容易混

v:=[2]string{"str1", "str2"} //這個(gè)是array

m:=[]string{"str1","str2"} //這個(gè)是slice

寫(xiě)法上默念:array有長(zhǎng)度slice沒(méi)長(zhǎng)度,array有長(zhǎng)度slice沒(méi)長(zhǎng)度…

2 slice是一個(gè)指針而不是值。

指針比值可就小多了,因此,我們將slice作為函數(shù)參數(shù)傳遞比將array作為函數(shù)參數(shù)傳遞會(huì)更有性能。

slice是一個(gè)指針,它指向的是一個(gè)array機(jī)構(gòu),它有兩個(gè)基本函數(shù)len和cap。

看下面的圖示:

clip_image003

slice是一個(gè)帶有point(指向數(shù)組的指針),Len(數(shù)組中實(shí)際有值的個(gè)數(shù)),Cap(數(shù)組的容量)

比如上面的這個(gè)slice,它指向的數(shù)組是[3]int,其中的前兩個(gè)有值,第三個(gè)為空

那么

len(slic) = 2

cap(slic) = 3

append函數(shù)就理解為往slice中加入一個(gè)值,如果未達(dá)到容量(len<cap)那么就直接往數(shù)組中加值,如果達(dá)到容量(len = cap)那么就增加一個(gè)新的元素空間,將值放在里面

map結(jié)構(gòu)

map結(jié)構(gòu)也經(jīng)常常用,它和php中的array()幾乎一模一樣,是一個(gè)key-value的hash結(jié)構(gòu)。key可以是除了func類(lèi)型,array,slice,map類(lèi)型之外的類(lèi)型。

它的使用也是非常簡(jiǎn)單

m:=map[string]string{}

m["key1"] = "val1"

map結(jié)構(gòu)和slice是一樣的,是一個(gè)指針。賦值的時(shí)候是將指針復(fù)制給新的變量

map的增刪改查操作是這樣

  1.  package main  
  2.    
  3. import(  
  4. "fmt" 
  5. )  
  6.    
  7. func main() {  
  8. m := map[string]string{"key1":"val1"}  
  9. fmt.Println(m)  
  10. m["key2"] = "val2" 
  11. fmt.Println(m)  
  12. p := m["key1"]  
  13. fmt.Println(p)  
  14. delete(m, "key1")  
  15. fmt.Println(m)  
  16. }  

clip_image004

原文鏈接:http://www.cnblogs.com/yjf512/archive/2012/06/14/2549929.html

 

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2022-02-09 16:02:26

Go 語(yǔ)言ArraySlice

2023-11-21 15:46:13

Go內(nèi)存泄漏

2023-11-30 08:09:02

Go語(yǔ)言

2021-07-08 23:53:44

Go語(yǔ)言拷貝

2021-05-14 08:58:18

非線(xiàn)性安全Go

2023-12-30 18:35:37

Go識(shí)別應(yīng)用程序

2023-12-21 07:09:32

Go語(yǔ)言任務(wù)

2024-04-07 11:33:02

Go逃逸分析

2021-07-15 23:18:48

Go語(yǔ)言并發(fā)

2023-10-09 07:14:42

panicGo語(yǔ)言

2024-09-03 09:45:36

2021-06-08 07:45:44

Go語(yǔ)言優(yōu)化

2023-07-29 15:03:29

2022-07-19 12:25:29

Go

2023-01-12 08:52:50

GoroutinesGo語(yǔ)言

2025-03-04 00:25:55

Go開(kāi)發(fā)者切片

2025-03-27 00:45:00

2021-07-13 06:44:04

Go語(yǔ)言數(shù)組

2024-01-08 07:02:48

數(shù)據(jù)設(shè)計(jì)模式

2024-05-10 08:36:40

Go語(yǔ)言對(duì)象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)