Go語言第3天 - 常用數(shù)據(jù)類型

以下內(nèi)容部分參考自
Go語言基礎(chǔ)數(shù)據(jù)類型
Go語言中的數(shù)組切片:特立獨行的可變數(shù)組
Go語言數(shù)據(jù)類型-數(shù)組
Go標準容器之List

1. 整形


其中比較特殊的是rune和uintptr。

rune 類型是 Unicode 字符類型张漂,和 int32 類型等價跑揉,通常用于表示一個 Unicode 碼點直撤。rune 和 int32 可以互換使用职恳。
uintptr 是一種無符號的整數(shù)類型沈跨,沒有指定具體的bit大小但是足以容納指針量九。 uintptr類型只有在底層編程是才需要黍檩,特別是Go語言和C語言函數(shù)庫或操作系統(tǒng)接口相交互的地方申钩。

2. 浮點型

Go語言提供了兩種精度的浮點數(shù)次绘,float32和float64。兩者就是范圍的不同撒遣,具體選擇看具體需求邮偎。

3. 復(fù)數(shù)

這種數(shù)據(jù)類型在其他語言中是比較少見的,Go語言提供了兩種精度的復(fù)數(shù)類型:complex64和complex128义黎,分別對應(yīng)float32和float64兩種浮點數(shù)精度禾进。

var z = x + yi //構(gòu)建復(fù)數(shù)
x = real(z) //取出實部
y = imag(z) //取出虛部

4. 布爾型

常用的true、false類型廉涕。

5. 字符串

Go語言中的字符串比js泻云、c#中的字符串少了一些封裝。
比如下標訪問直接訪問的是字節(jié)狐蜕,獲取長度也是字節(jié)的長度宠纯。想要按字符進行下標訪問,需要先用rune執(zhí)行切片操作层释。

var s = "123你好";
println(len(s)); //9
println(len([]rune(s))); //5
println(string(([]rune(s))[:4])); //123你

標準庫中有四個包對字符串處理尤為重要:bytes婆瓜、strings、strconv和unicode包贡羔。對字符串的常用操作都可以通過這四個包進一步封裝廉白。

6. 常量

如常數(shù)e和pi,此處不表乖寒。

7. Array

//聲明
var arr1 [5]int
var arr2 = [5]int{1, 2, 3, 4, 5}   //指定長度為5蒙秒,并賦5個初始值
var arr3 = [5]int{1, 2, 3}         //指定長度為5,對前3個元素進行賦值宵统,其他元素為零值
var arr4 = [5]int{4: 1}            //指定長度為5晕讲,對第5個元素賦值
var arr5 = [...]int{1, 2, 3, 4, 5} //不指定長度覆获,對數(shù)組賦以5個值
var arr6 = [...]int{8: 1}          //不指定長度,對第9個元素(下標為8)賦值1
//[0 0 0 0 0][1 2 3 4 5] [1 2 3 0 0] [0 0 0 0 1] [1 2 3 4 5] [0 0 0 0 0 0 0 0 1]
fmt.Print(arr1,arr2,arr3,arr4,arr5,arr6);

//獲取數(shù)組長度
fmt.Print(len(arr1)); //5

//通過下標訪問元素
fmt.Print(arr5[2]);  //3

//通過range訪問元素
for i, v := range arr {
    //range具有兩個返回值瓢省,第一個返回值i是元素的數(shù)組下標弄息,第二個返回值v是元素的值。
    fmt.Println(i, v)
}

數(shù)組是Go語言編程中最常用的數(shù)據(jù)結(jié)構(gòu)之一勤婚。
與部分語言不同的是摹量,Go語言中的數(shù)組是值類型的,不是引用類型的馒胆。所以調(diào)用函數(shù)傳進一個數(shù)組參數(shù)缨称,函數(shù)內(nèi)部修改數(shù)組參數(shù)不會影響外部數(shù)組的值。

8.Slice

slice是對底層數(shù)組的抽象和控制祝迂,使用slice可以動態(tài)控制數(shù)組的增長和收縮睦尽。

//slice聲明,3個參數(shù)型雳,分別為類型当凡、長度、容量
var arr1 = make([]int,3,5);

//slice聲明纠俭,不定長度沿量,與數(shù)組相似,但是[]中間不需要指定長度
var arr2 = []int{1, 2, 3, 4, 5};

//數(shù)組動態(tài)增加元素
arr2 = append(arr2,6); 
fmt.Print(arr2); //[1 2 3 4 5 6]

類型冤荆、長度和Array一樣理解朴则,容量指給數(shù)組變動預(yù)留的內(nèi)存大小,提前給你劃好內(nèi)存區(qū)域钓简,如果擴展長度不用重新申請內(nèi)存佛掖。
append操作會每次考察你的容量是否足夠,如果不夠會重新申請內(nèi)存涌庭,所有設(shè)置合理的容量芥被,可以避免反復(fù)申請內(nèi)存,提高性能坐榆。

這里我并沒有提到刪除元素的方法拴魄,因為從slice這種數(shù)據(jù)結(jié)構(gòu)來看,本身并不適合做刪除操作席镀。拋開語言匹中,只談數(shù)據(jù)結(jié)構(gòu),我們知道數(shù)組刪除是會移動元素的豪诲,效率會比較低顶捷。當然任何語言的數(shù)組實現(xiàn)(順序存儲),刪除元素都避免不了移動元素屎篱。
所以服赎,如果會頻繁刪除中間或開頭的元素葵蒂,更好的是選擇鏈表這樣的數(shù)據(jù)結(jié)構(gòu),如map或container/list包重虑。

如果一定要執(zhí)行刪除操作的話践付,可以這么寫:

var arr = []int{1, 2, 3, 4, 5};
var deleteIndex = 2; //待刪除的元素下標
var newArr = append(arr[:deleteIndex],arr[deleteIndex+1:]...);
fmt.Print(newArr); //[1 2 4 5]

9.Map

Go語言中的映射類型,相當于哈希表缺厉。

var temp1 = make(map[string]int); //初始化
temp1["dog"] = 233; //添加值
println(temp1["dog"]) //233

var value,isExist = temp1["cat"]; //value-值永高,isExist-是否存在這個key
println(value); //0
println(isExist); //false

var temp2 = map[string]int{"one":1,"two":2}; //初始化
println(len(temp2)); //2
delete(temp2,"two"); //刪除值
println(len(temp2)); //1

10.List

使用起來非常方便、簡單的動態(tài)數(shù)組提针。

var list = list2.New();
list.PushBack(1);
list.PushBack(2);
list.PushFront(3);
list.PushFront(4);
list.Remove(list.Front());
list.InsertBefore(5,list.Front());

//遍歷數(shù)組壶硅,輸出:5312
for e := list.Front(); e != nil; e = e.Next() {
    fmt.Print(e.Value)
}

11.待補充...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阳懂,一起剝皮案震驚了整個濱河市觅捆,隨后出現(xiàn)的幾起案子璧针,更是在濱河造成了極大的恐慌泼橘,老刑警劉巖民晒,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尾序,死亡現(xiàn)場離奇詭異悯许,居然都是意外死亡亥啦,警方通過查閱死者的電腦和手機炭剪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翔脱,“玉大人奴拦,你說我怎么就攤上這事〗煊酰” “怎么了错妖?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疚沐。 經(jīng)常有香客問我暂氯,道長,這世上最難降的妖魔是什么亮蛔? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任痴施,我火速辦了婚禮,結(jié)果婚禮上究流,老公的妹妹穿的比我還像新娘辣吃。我一直安慰自己,他們只是感情好芬探,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布神得。 她就那樣靜靜地躺著,像睡著了一般偷仿。 火紅的嫁衣襯著肌膚如雪哩簿。 梳的紋絲不亂的頭發(fā)上宵蕉,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音卡骂,去河邊找鬼国裳。 笑死,一個胖子當著我的面吹牛全跨,可吹牛的內(nèi)容都是我干的缝左。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼浓若,長吁一口氣:“原來是場噩夢啊……” “哼渺杉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挪钓,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤是越,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碌上,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倚评,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年馏予,在試婚紗的時候發(fā)現(xiàn)自己被綠了天梧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡霞丧,死狀恐怖呢岗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛹尝,我是刑警寧澤后豫,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站突那,受9級特大地震影響挫酿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愕难,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一早龟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧务漩,春花似錦拄衰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至居触,卻和暖如春妖混,著一層夾襖步出監(jiān)牢的瞬間老赤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工制市, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抬旺,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓祥楣,卻偏偏與公主長得像开财,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子误褪,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 出處---Go編程語言 歡迎來到 Go 編程語言指南责鳍。本指南涵蓋了該語言的大部分重要特性 Go 語言的交互式簡介,...
    Tuberose閱讀 18,411評論 1 46
  • 1.安裝 https://studygolang.com/dl 2.使用vscode編輯器安裝go插件 3.go語...
    go含羞草閱讀 1,546評論 0 6
  • 官方網(wǎng)站:https://golang.org/標準庫文檔:https://golang.org/pkg/在線編碼...
    技術(shù)學(xué)習(xí)閱讀 2,324評論 2 39
  • 成長對于我們來說兽间,雖然害怕历葛,但我們?nèi)匀灰獔猿治覀兛梢宰龅降摹S嗌敲撮L嘀略,就讓我們成為更好的自己吧恤溶。 時光流逝,任何...
    TWO女王閱讀 488評論 0 1
  • 大家好我是王智海軒帜羊,就在前幾天我參加了一個開發(fā)潛能的活動我和咱們班的兩個同學(xué)參加工加的咒程,第一天下午我們吃了晚飯就始...
    王智海軒閱讀 59評論 0 1