C++程序員的go學(xué)習(xí)之路(2)——常用數(shù)據(jù)類型

bool, int, float, complex, ...
懶得多說痴奏,大體跟C++也差不多梦抢,int, uint, int16, uint32什么的案糙;float32/float64地啰;complex是復(fù)數(shù)策彤,原生支持栓袖;
array, slice, range
數(shù)組顿膨,長度固定,跟其他語言的數(shù)組其實(shí)也差不太多:

var numbers = [3]int{1,2,3}
var numbers = [...]int{1,2,3} //這里長度也可以省略
var length = len(numbers)

如果一個(gè)數(shù)組沒有賦值叽赊,則默認(rèn)值為[length[type{0,0,0...}
切片(slice)是以數(shù)組作為底層數(shù)據(jù)結(jié)構(gòu)的一種引用類型恋沃,每個(gè)切片都會(huì)有一個(gè)對(duì)應(yīng)的數(shù)組,如果沒有進(jìn)行初始化則其值為nil:

var nums := []int{2, 3, 4}
// 其他訪問方式等基本與數(shù)組一致

簡單的說必指,切片可以看成一個(gè)結(jié)構(gòu)體囊咏,里面保存了容量、元素個(gè)數(shù)與底層的一個(gè)數(shù)組塔橡;多個(gè)切片可以指向同一個(gè)數(shù)組梅割;需要詳細(xì)了解其中的實(shí)現(xiàn),有一些需要注意的問題葛家,比如作為函數(shù)參數(shù)時(shí)發(fā)生了什么户辞,什么時(shí)候會(huì)導(dǎo)致誤修改其他數(shù)組中的值等。
range用于在for循環(huán)中迭代array癞谒、slice底燎、map等中的元素,數(shù)組與切片中返回索引和值弹砚,map中則返回key-value對(duì):

nums := []int{2,3,4}
for _, num := range nums {
  ...
}

string
通常為UTF-8編碼双仍,分為解釋字符串("test")與非解釋字符串(`test`),解釋字符串中相關(guān)的轉(zhuǎn)義字符會(huì)被替換桌吃,而非解釋字符串則不會(huì)轉(zhuǎn)義朱沃,且支持換行。
與C/C++不一樣茅诱,go中的字符串根據(jù)長度限定逗物,而非以‘\0’結(jié)尾。
struct
跟其他語言的也差不太多瑟俭,不過變量的首字母有特殊的含義翎卓,首字母小寫的變量在包外無法引用。

type Books struct {
  title string
  author string
  subject string
  book_id int
}
var Book1 Books
Book1.title = "xxx"

go中還有個(gè)東西叫struct tag尔当,由于go中命名一般都用駝峰方式且首字母的大小寫具有語法含義莲祸,所以有時(shí)候在進(jìn)行一些數(shù)據(jù)交互(舉例:轉(zhuǎn)json格式)時(shí)會(huì)需要用其他的屬性名作為鍵值。這時(shí)可以用tag在結(jié)構(gòu)體成員后面加一些字符串:

type User struct {
  UserId int `json:"user_id"`
  UserName string `json:"user_name"`
}

tag中的內(nèi)容可以通過反射獲取椭迎,這里僅作了解锐帜。
map
go中的map基于hash實(shí)現(xiàn),無序畜号,不要依賴map的遍歷順序缴阎。用法其實(shí)跟STL中的map也差不多,不過需要初始化简软。

var countryCapitalMap map[string]string
countryCapitalMap := make(map[string]string)

countryCapitalMap["China"] = "Beijing"
countryCapitalMap ["Japan"] = "Tokyo"
delete(countryCapitalMap, "Japan")

channel
channel是go中的一個(gè)核心類型蛮拔,用于通信述暂,可以將它看成一個(gè)管道:

ch <- v  // 發(fā)送值v到Channel ch中
v := <-ch // 從Channel ch中接收數(shù)據(jù),并賦值給v

可以在多個(gè)goroutine中讀寫同一個(gè)channel建炫,不必考慮額外的同步措施畦韭;
可以做為一個(gè)FIFO隊(duì)列,接收數(shù)據(jù)的順序與發(fā)送數(shù)據(jù)的順序是一致的肛跌;
缺省狀態(tài)下艺配,發(fā)送和接收會(huì)一直阻塞直至另一端準(zhǔn)備好,這種方式可以用來同步goroutine衍慎,而不必使用鎖或條件變量转唉;當(dāng)然在設(shè)置了buffer的情況下就還要考慮buffer滿沒滿了;
interface
C++中通過抽象類實(shí)現(xiàn)接口稳捆,java中也有interface關(guān)鍵字赠法,但是它們都需要顯式的聲明實(shí)現(xiàn)了某個(gè)接口,例如 Class A : public interfaceClassB乔夯,這稱之為侵入式接口砖织。而go中的接口為非侵入式接口,某個(gè)類只要實(shí)現(xiàn)了接口所要求的所有函數(shù)驯嘱,我們就說這個(gè)類實(shí)現(xiàn)了該接口镶苞。這樣有幾個(gè)好處:
1喳坠、去掉了繁雜的繼承體系鞠评;
2、實(shí)現(xiàn)類的時(shí)候只需要關(guān)心自己應(yīng)該提供的方法壕鹉,不需要糾結(jié)接口的拆分剃幌;
3、不需要為了實(shí)現(xiàn)一個(gè)接口而導(dǎo)入一個(gè)包晾浴,因?yàn)槎嘁靡粋€(gè)外部的包就意味著更多的耦合负乡;
前面提到,一個(gè)類型如果實(shí)現(xiàn)了某個(gè)interface的所有方法就說該類型實(shí)現(xiàn)了這個(gè)interface脊凰,而空的interface沒有方法抖棘, 所以可以認(rèn)為所有的類型都實(shí)現(xiàn)了空interface,所以空的interface可以用來作為函數(shù)參數(shù)狸涌,它可以接受任何類型:

func doSomething(v interface{}) {}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末切省,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帕胆,更是在濱河造成了極大的恐慌朝捆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懒豹,死亡現(xiàn)場(chǎng)離奇詭異芙盘,居然都是意外死亡驯用,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門儒老,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝴乔,“玉大人,你說我怎么就攤上這事驮樊√哉猓” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵巩剖,是天一觀的道長铝穷。 經(jīng)常有香客問我,道長佳魔,這世上最難降的妖魔是什么曙聂? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮鞠鲜,結(jié)果婚禮上宁脊,老公的妹妹穿的比我還像新娘。我一直安慰自己贤姆,他們只是感情好榆苞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霞捡,像睡著了一般坐漏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碧信,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天赊琳,我揣著相機(jī)與錄音,去河邊找鬼砰碴。 笑死躏筏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呈枉。 我是一名探鬼主播趁尼,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼猖辫!你這毒婦竟也來了酥泞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤住册,失蹤者是張志新(化名)和其女友劉穎婶博,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凡人,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年名党,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挠轴。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡传睹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岸晦,到底是詐尸還是另有隱情欧啤,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布启上,位于F島的核電站邢隧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冈在。R本人自食惡果不足惜倒慧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望包券。 院中可真熱鬧纫谅,春花似錦、人聲如沸溅固。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侍郭。三九已至询吴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間励幼,已是汗流浹背汰寓。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苹粟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓跃闹,卻偏偏與公主長得像嵌削,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子望艺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • 1.安裝 https://studygolang.com/dl 2.使用vscode編輯器安裝go插件 3.go語...
    go含羞草閱讀 1,556評(píng)論 0 6
  • 出處---Go編程語言 歡迎來到 Go 編程語言指南苛秕。本指南涵蓋了該語言的大部分重要特性 Go 語言的交互式簡介,...
    Tuberose閱讀 18,451評(píng)論 1 46
  • Go入門 Go介紹 部落圖鑒之Go:爹好還這么努力找默? 環(huán)境配置 安裝 下載源碼編譯安裝 下載相應(yīng)平臺(tái)的安裝包安裝 ...
    齊天大圣李圣杰閱讀 4,625評(píng)論 0 26
  • 【曾子避席】 “曾子避席”出自《孝經(jīng)》艇劫,是一個(gè)非常著名的故事。 仲尼居惩激,曾子侍店煞。子曰:“先王有至德要道蟹演,以順天下。...
    張蕾馥閱讀 1,032評(píng)論 0 0
  • 20180701 11/100 天氣:晴 昨晚早睡:11:30(兒子發(fā)燒) 今日早起:5:39 今日運(yùn)動(dòng):跑步 1...
    楊豆豆2018閱讀 138評(píng)論 0 0