GO——學(xué)習(xí)筆記(四)

上篇:GO——學(xué)習(xí)筆記(三)

下篇:GO——學(xué)習(xí)筆記(五)

參考:

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.3.md

示例代碼——go_3

https://github.com/jiutianbian/golang-learning/blob/master/go_3/main.go

一、函數(shù)

函數(shù)定義

    func sayHello(name string, age int) (sayName string, sayAge string, askYou string) {
        sayName = "我叫" + name                        //由于返回值中已經(jīng)定義了sayName的變量柔昼,所以不需要再定義,可以直接賦值
        sayAge = "今年" + fmt.Sprintf("%d", age) + "歲" //將int類型通過(guò)Sprintf方法轉(zhuǎn)為字符串
        askYou = "你呢捕透?"

        return sayName, sayAge, askYou
    }
  • 函數(shù)用 func 關(guān)鍵字來(lái)聲明
  • sayHello 為函數(shù)名,區(qū)分大小寫,大寫開頭為公有方法咳燕,小寫開頭為私有,具體使用詳情后面介紹
  • name和age為函數(shù)入?yún)⒄忻ぃ梢詻](méi)有,或者單個(gè)嘉冒,或者多個(gè)。
  • sayName讳推,sayAge和askYou為函數(shù)出參(返回值),可以沒(méi)有银觅,或者單個(gè)或者多個(gè)返回值礼饱,這個(gè)要著重說(shuō)一下究驴,java和C最多只能有單個(gè)返回值镊绪,不存在多個(gè)返回值的情況洒忧,此屬于golang函數(shù)的特性

函數(shù)多返回值

具體,可以上面的例子熙侍,就是一個(gè)多返回值的示例

變參

func saySomeThing(something ...string) {//變參是指不定數(shù)量的參數(shù)榄鉴,用...和具體的參數(shù)類型表示
    for index, value := range something {
        fmt.Println("index:", index)
        fmt.Println("value:", value)
    }
}

傳指針作為入?yún)?/h4>
func main() {
    name := "湯姆"

    //如果我們只是傳入值蛉抓,不傳指針庆尘,那么只相當(dāng)于對(duì)name的copy做操作巷送,實(shí)際的name值不會(huì)變更驶忌,還是會(huì)輸出湯姆
    sayHelloByName := sayHelloByName(name)
    fmt.Println("name:" + name) //輸出 name:湯姆

    //如果我們傳指針惩系,那么只相當(dāng)于對(duì)name本身做操作,實(shí)際的name值會(huì)變更堡牡,會(huì)輸出為湯姆漢克斯
    sayHelloByName := sayHelloByNameZhiZhen(&name)
    fmt.Println("namebyzhizhen:" + name) //輸出 namebyzhizhen:湯姆漢克斯

    fmt.Println("sayHelloByName:" + sayHelloByName_1)      //輸出 sayHelloByName:湯姆漢克斯
    fmt.Println("sayHelloByNameZhiZhen:" + sayHelloByName) //輸出 sayHelloByNameZhiZhen:你好湯姆漢克斯
}

func sayHelloByName(name string) (sayHelloByName string) {
    name = name + "漢克斯"
    return "你好" + name
}

func sayHelloByNameZhiZhen(name *string) (sayHelloByName string) {
    *name = *name + "漢克斯"
    return "你好" + *name
}
  • 傳指能夠讓函數(shù)操作同一對(duì)象
  • Go語(yǔ)言中channel抒抬,slice晤柄,map這三種類型的實(shí)現(xiàn)機(jī)制類似指針擦剑,所以可以直接傳遞,而不用取地址后傳遞指針惠勒。(注:若函數(shù)需改變slice的長(zhǎng)度,則仍需要取地址傳遞指針)

傳函數(shù)作為入?yún)?/h4>
func main() {
    //通過(guò)傳入同種輸入輸出格式纠屋,但不同的函數(shù),來(lái)獲得不同的函數(shù)輸出
    fmt.Println(getMyView("小明", sayHate))    //輸出 我恨小明
    fmt.Println(getMyView("湯姆漢克斯", sayLove)) //輸出 我喜歡湯姆漢克斯
}

type sayLoveOrHate func(string) string // 聲明了一個(gè)函數(shù)類型為sayLoveOrHate售担,用來(lái)表示一個(gè)輸入?yún)?shù)和一個(gè)輸出參數(shù)的函數(shù)

func getMyView(name string, say sayLoveOrHate) (view string) { //聲明了一個(gè)函數(shù)getMyview符欠,傳入了sayLoveOrHate的函數(shù)類型作為輸入?yún)?shù)
    return say(name)
}

func sayLove(name string) (sayLove string) {
    return "我喜歡" + name
}

func sayHate(name string) (sayLove string) {
    return "我恨" + name
}

二短条、 golang的異常機(jī)制 Panic和Recover

    defer func() { // 必須要先聲明defer恭朗,否則不能捕獲到panic異常
        if err := recover(); err != nil {
            fmt.Println(err) // 這里的err其實(shí)就是panic傳入的內(nèi)容哥攘,55
        }
    }()

    panic("我死掉了") //主動(dòng)拋出 panic
  • Go沒(méi)有像Java那樣的異常機(jī)制剖煌,它不能拋出異常逝淹,而是使用了panic和recover機(jī)制耕姊。
  • 建議少用创橄,有可能會(huì)引起性能問(wèn)題
  • panic用來(lái)拋出異常箩做,defer 中的函數(shù)塊用來(lái)捕獲異常妥畏,并執(zhí)行處理操作-
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末安吁,一起剝皮案震驚了整個(gè)濱河市醉蚁,隨后出現(xiàn)的幾起案子鬼店,更是在濱河造成了極大的恐慌网棍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滥玷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惑畴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門如贷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事尚猿。” “怎么了楣富?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纹蝴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)骗灶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任耙旦,我火速辦了婚禮,結(jié)果婚禮上免都,老公的妹妹穿的比我還像新娘锉罐。我一直安慰自己绕娘,他們只是感情好脓规,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布险领。 她就那樣靜靜地躺著侨舆,像睡著了一般绢陌。 火紅的嫁衣襯著肌膚如雪挨下。 梳的紋絲不亂的頭發(fā)上脐湾,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天臭笆,我揣著相機(jī)與錄音秤掌,去河邊找鬼愁铺。 笑死闻鉴,一個(gè)胖子當(dāng)著我的面吹牛茵乱,可吹牛的內(nèi)容都是我干的椒拗。 我是一名探鬼主播似将,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼在验!你這毒婦竟也來(lái)了玷氏?” 一聲冷哼從身側(cè)響起腋舌,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎块饺,沒(méi)想到半個(gè)月后赞辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體授艰,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辨嗽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年淮腾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糟需。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谷朝。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圆凰,靈堂內(nèi)的尸體忽然破棺而出杈帐,到底是詐尸還是另有隱情专钉,我是刑警寧澤挑童,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布驶沼,位于F島的核電站炮沐,受9級(jí)特大地震影響争群,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜换薄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轻要。 院中可真熱鬧复旬,春花似錦冲泥、人聲如沸驹碍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怔球。三九已至浮还,卻和暖如春竟坛,著一層夾襖步出監(jiān)牢的瞬間钧舌,已是汗流浹背担汤。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工洼冻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崭歧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓驾荣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親普泡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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