go學(xué)習(xí)筆記(僅記錄差異)

可見(jiàn)性

  1. 聲明在函數(shù)內(nèi)部,是函數(shù)的本地值,類(lèi)似private
  2. 聲明在函數(shù)外部,是對(duì)當(dāng)前包可見(jiàn)(包內(nèi)所有.go文件都可見(jiàn))的全局值,類(lèi)似protect
  3. 聲明在函數(shù)外部且首字母大寫(xiě)是所有包可見(jiàn)的全局值,類(lèi)似public

類(lèi)型

  • 值類(lèi)型: bool, int(32 or 64), int8, int16, int32, int64, uint(32 or 64), uint8(byte), uint16, uint32, uint64, float32, float64, string,complex64, complex128, array -- 固定長(zhǎng)度的數(shù)組
  • 引用類(lèi)型:
    slice   -- 序列數(shù)組(最常用)  
    map     -- 映射  
    chan    -- 管道`

和js不同,go的array是值類(lèi)型,事實(shí)上js的array特性和go的slice更加貼近,因?yàn)閖s的數(shù)組是變長(zhǎng)的,而go中是定長(zhǎng)的

展開(kāi)運(yùn)算符

go中展開(kāi)運(yùn)算符是后置的,

//展開(kāi)數(shù)組或切片
a:={arr...}
//聲明變參函數(shù)
func test(s string, n ...int) string {
    var x int
    for _, i := range n {
        x += i
    }
    return fmt.Sprintf(s, x)
}

異常處理

go中沒(méi)有try catch這樣結(jié)構(gòu)化的異常處理,而是使用 panic 拋出錯(cuò)誤,recover 捕獲錯(cuò)誤。

  • 程序遇到panic 后會(huì)中斷后續(xù)的程序執(zhí)行
  • recover的定義必須在panic 之前,因?yàn)閜anic 會(huì)終止后續(xù)代碼的執(zhí)行,如果recover 定義在panic 后面,程序已經(jīng)被中斷了,所以不會(huì)生效。
  • recover 必須使用defer,不然無(wú)法捕panic
  • 函數(shù)G調(diào)用函數(shù)F,如果函數(shù)F拋出panic ,G也會(huì)被中斷,但是G函數(shù)中的defer依舊會(huì)執(zhí)行
  • 連續(xù)使用defer可以連續(xù)拋出panic,但是只有最后執(zhí)行的那個(gè)defer能被捕獲到,也就是后拋出的panic會(huì)覆蓋先拋出的panic,但是可以連續(xù)拋出捕獲,例如:
func main() {
    defer func() {
        fmt.Println("Recovering from panic in first defer.")
        if err := recover(); err != nil {
            fmt.Println("Recovering from panic in second defer2:", err)
        }
    }()
    //捕獲后再次拋出
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("Recovering from panic in second defer:", err)
            panic("Panic2!")
        }
    }()
    panic("Panic!")
}

輸出結(jié)果為:


image.png

panic雖然會(huì)拋出錯(cuò)誤,但是只建議在會(huì)影響程序正常執(zhí)行的時(shí)候去使用,用于中斷程序的執(zhí)行,其他的異常情況,建議直接返回err并且處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容