Go語(yǔ)言基礎(chǔ)知識(shí)(二)

Go 提供了另外一種重要的數(shù)據(jù)類型:映射(Map) 窥突,它將唯一鍵映射到值。鍵是用于在檢索值的對(duì)象硫嘶。給定一個(gè)鍵和一個(gè)值就可以在 Map 對(duì)象中設(shè)置值阻问。設(shè)置存儲(chǔ)值后,就可以使用其鍵值索引它對(duì)應(yīng)的值了沦疾。

>教程來自 http://www.yiibai.com/go/go_start.html
感謝博主的精心編寫称近。

定義映射

必須使用 make 函數(shù)來創(chuàng)建映射第队。

//聲明一個(gè)變量,默認(rèn)map是空
var map_variable map[key_data_type]value_data_type
//創(chuàng)建映射
map_variable = make(map[key_data_type]value_data_type)

映射的創(chuàng)建和使用:

func main(){
    var contryCapitalMap map[string]string
    // create a map
    contryCapitalMap = make(map[string]string)
    
    // insert key-value pairs in the map
    countryCapitalMap["France"] = "Paris"
    countryCapitalMap["Italy" ] = "Rome"
    countryCapitalMap["Japan" ] = "Tokyo"
    countryCapitalMap["India" ] = "New Delhi"
    
    // print map using key
    for country := range countryCapitalMap{
        fmt.Println("Capital of",country,"is",countryCapitalMap[country])
    
    // test if entry is present in the map or not
    capital , ok := countryCapitalMap["United States"]
    
    if(ok){
        fmt.Println("Captial of United States is",capital)
    }else{
        fmt.Println("NONE")
    }
}

delete() 函數(shù)

delete()函數(shù)用于從映射中刪除項(xiàng)目刨秆。它需要映射以及制定要?jiǎng)h除的相應(yīng)鍵凳谦。以下是示例:

func main(){
    // create a map
    countryCapitapMap := map[string]string {"France":"Paris","Italy":"Rome","Japan":"Tokyo","India":"New Delhi"}
    
    fmt.Println("Original map")
    
    //print map
    
    for count : range countryCapitalMap{
        fmt.Println("Capital of",country,"is",countryCapitalMap[country])
        
    //delete an entry
    delete(countryCapitalMap,"France");
    
    for country := range countryCapitalMap{
        fmt.Println("Capital of",country,"is",countryCapitalMap[country])
    }
    }
}

Go語(yǔ)言遞歸

遞歸是以自相似的方式重復(fù)項(xiàng)的過程。這同樣適用于其它編程語(yǔ)言衡未,在編程語(yǔ)言中允許在函數(shù)內(nèi)調(diào)用同一個(gè)函數(shù)稱為遞歸調(diào)用尸执,如下所示。

func recursion(){
    recursion() // function calls itself
}

func main(){
    recursion()
}

Go編程語(yǔ)言支持遞歸缓醋,即函數(shù)調(diào)用自身的函數(shù)如失。但是在使用遞歸時(shí),程序員需要注意在函數(shù)中定義或設(shè)置一個(gè)退出條件送粱,否則會(huì)進(jìn)入一個(gè)無限循環(huán)褪贵。

遞歸函數(shù)非常有用,可用于解決許多數(shù)學(xué)問題抗俄,計(jì)算階乘竭鞍,生成斐波那契數(shù)列等。

數(shù)字階乘示例

func factorial(i int)int{
    if(i <= 1){
        return 1
    }
    return i * factorial(i - 1)
}
func main(){
    var i int = 15 
    fmt.Printf("Factorial of %d is %d",i,factorial(i))
}

斐波那契系列示例

func fibonaci(i int)(ret int){
    if i == 0 {
        return 0 
    }
    
    if i == 1 {
        return 1
    }
    return fibonaci(i-1) + fibonaci(i-2)
}
func main(){
    var i int
    for i = 0 ; i < 10 ; i++ {
        fmt.Printf("%d",fibonaci(i))
    }
}

Go 語(yǔ)言類型轉(zhuǎn)換

類型轉(zhuǎn)換是一種將變量從一種數(shù)據(jù)類型轉(zhuǎn)化為另一種數(shù)據(jù)類型的方法橄镜。例如,如果將長(zhǎng)整型值存儲(chǔ)到簡(jiǎn)單的整數(shù)類型冯乘,那么可以將轉(zhuǎn)換 long 類型為 int 類型洽胶。可以使用 轉(zhuǎn)換操作符 將值從一種類型轉(zhuǎn)換為另一種類型裆馒,如下所示:

rype_name(expression)

看看下面的例子姊氓,其中轉(zhuǎn)換操作符將一個(gè)整數(shù)變量并將其結(jié)果值轉(zhuǎn)換為浮點(diǎn)數(shù)。

func main(){
   var sum int    = 17
   var conunt int = 5
   var mean float32
   
   mean = float32(sum)/float32(count)
   fmt.Printf("Value of mean :%f\n",mean)
}

Go語(yǔ)言接口

Go語(yǔ)言提供了另一種稱為接口 interface 的數(shù)據(jù)類型喷好,它代表一組方法簽名翔横。struct 的數(shù)據(jù)類型實(shí)現(xiàn)這些接口的方法。

語(yǔ)法

//定義一個(gè)數(shù)據(jù)類型
type interface_name interface {
    method_name1 [return_type]
    method_name2 [return_type]
    method_name3 [return_type]
    ...
    method_namen [return_type]
}

//定義一個(gè)結(jié)構(gòu)
type struct_name struct{
    //variable
}

func (struct_name_variable struct_name)method_name1()[return_type]{
    //method implementation
}

func (struct_name_variable struct_name)method_name2()[return_type]{
    //method implementation
}

示例

type Sharp interface{
    area() float64
}

type Circle struct{
    x,y,radius float64
}

type Rectangle struct{
    width,height float64
}

func(circle Circle) area() float64{
    return math.Pi * circle.radius * circle.radius
}

func(rect Rectangle) area() float64{
    return rect.width * rect.height
}
func getArea(shape Shape) float64{
    return shape.area()
}

func main(){
    circle := Circle{x:0,y:0,radius:5}
    rectangle := Rectangle{width:10,height:5}
    
    fmt.Println(getArea(circle))
    fmt.Println(getArea(rectangle))
}

Go語(yǔ)言錯(cuò)誤處理

Go編程提供了一個(gè)非常簡(jiǎn)單的錯(cuò)誤處理框架梗搅,以及內(nèi)置的錯(cuò)誤接口類型禾唁,如下聲明:

type error interface {
    Error() string
}

函數(shù)通常返回錯(cuò)誤作為最后一個(gè)返回值∥耷校可使用 errors.New 來構(gòu)造一個(gè)基本的錯(cuò)誤消息荡短,如下圖所示:

func Sqrt(value float64)(float64, error){
    if(value < 0){
        return 0 , errors.New("Math: negative number passed to Sqrt")
    }
    return math.Sqrt(value)
}

使用返回值和錯(cuò)誤信息,如下圖所示:

reslut , error := sqrt(-1)
if err != nil {
    fmt.Println(err)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哆键,一起剝皮案震驚了整個(gè)濱河市掘托,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌籍嘹,老刑警劉巖闪盔,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弯院,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泪掀,警方通過查閱死者的電腦和手機(jī)听绳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來族淮,“玉大人辫红,你說我怎么就攤上這事∽@保” “怎么了贴妻?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蝙斜。 經(jīng)常有香客問我名惩,道長(zhǎng),這世上最難降的妖魔是什么孕荠? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任娩鹉,我火速辦了婚禮,結(jié)果婚禮上稚伍,老公的妹妹穿的比我還像新娘弯予。我一直安慰自己,他們只是感情好个曙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布锈嫩。 她就那樣靜靜地躺著,像睡著了一般垦搬。 火紅的嫁衣襯著肌膚如雪呼寸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天猴贰,我揣著相機(jī)與錄音对雪,去河邊找鬼。 笑死米绕,一個(gè)胖子當(dāng)著我的面吹牛瑟捣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栅干,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蝶柿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了非驮?” 一聲冷哼從身側(cè)響起交汤,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芙扎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體星岗,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年戒洼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俏橘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圈浇,死狀恐怖寥掐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磷蜀,我是刑警寧澤召耘,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站褐隆,受9級(jí)特大地震影響污它,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庶弃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一衫贬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歇攻,春花似錦固惯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至斧散,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摊聋,已是汗流浹背鸡捐。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麻裁,地道東北人箍镜。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像煎源,于是被迫代替她去往敵國(guó)和親色迂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理手销,服務(wù)發(fā)現(xiàn)歇僧,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 前言 人生苦多,快來 Kotlin 诈悍,快速學(xué)習(xí)Kotlin祸轮! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,173評(píng)論 9 118
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,219評(píng)論 0 4
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 侥钳? MyBatis 是支持定制化 SQL适袜、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,462評(píng)論 0 4
  • 很多人說,人要為自己而活舷夺。 也有人說苦酱,人生只有一次何不去選擇。 “快樂”给猾,有多少人能徹底領(lǐng)悟疫萤。 我想旅行,去法國(guó)看...
    宿宿與夢(mèng)閱讀 1,057評(píng)論 2 0