Go語(yǔ)言編程筆記

1.第1章 初識(shí)Go語(yǔ)言

  1. 介紹了好多工具,我這里使用sublime text3 + window的go1.4進(jìn)行學(xué)習(xí)。
    需要安裝gosublime插件,都很簡(jiǎn)單,不再贅述.

2. 第二章 順序編程

  1. 多重賦值可以交換變量的值 的 i,j = j,i
  2. Go語(yǔ)言的預(yù)定義常量: ture , false 和iota 。
    const (
    c0 = iota //0
    c1 //1
    c2 //2

3.go里的數(shù)組只能傳值,不能傳值。 數(shù)組切片(slice)能實(shí)現(xiàn)動(dòng)態(tài)數(shù)組和傳址,它特別像一個(gè)指向數(shù)組的指針, 當(dāng)然他有自己的數(shù)據(jù)結(jié)構(gòu)。

  • 基于數(shù)組創(chuàng)建slice:
    var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    //基于 myArray 的所有元素創(chuàng)建數(shù)組切片:
    mySlice = myArray[:]
    //基于 myArray 的前5個(gè)元素創(chuàng)建數(shù)組切片:
    mySlice = myArray[:5]
    //基于從第5個(gè)元素開(kāi)始的所有元素創(chuàng)建數(shù)組切片:
    mySlice = myArray[5:]

  • 直接創(chuàng)建(使用make)
    //創(chuàng)建一個(gè)初始元素個(gè)數(shù)為5的數(shù)組切片,元素初始值為0,并預(yù)留10個(gè)元素的存儲(chǔ)空間:
    mySlice2 := make([]int, 5, 10)

  • slice數(shù)組的遍歷和正常的數(shù)組遍歷一樣
    for i, v := range mySlice{
    fmt.Printfln("mySlice[", i, "] = ", v)
    }

  • 增加數(shù)組的元素
    fmt.Println("len(mySlice):", len(mySlice)) //計(jì)算mySlice數(shù)組切片中當(dāng)前所存儲(chǔ)的元素個(gè)數(shù)
    fmt.Println("cap(mySlice):", cap(mySlice)) //計(jì)算mySlice數(shù)組切片分配的空間大小
    mySlice = append(mySlice, 1, 2, 3) //追加三個(gè)元素
    mySlice = append(mySlice, mySlice2...) //打散追加mySlice2的元素,注意...不可以去掉

    copy(slice2, slice1) // 只會(huì)復(fù)制slice1的前3個(gè)元素到slice2中
    copy(slice1, slice2) // 只會(huì)復(fù)制slice2的3個(gè)元素到slice1的前3個(gè)位置

  1. map語(yǔ)句
    package main
    import "fmt"
    // PersonInfo是一個(gè)包含個(gè)人詳細(xì)信息的類型
    type PersonInfo struct {
    ID string
    Name string
    Address string
    }
    func main() {
    var personDB map[string] PersonInfo
    personDB = make(map[string] PersonInfo)
    // 往這個(gè)map里插入幾條數(shù)據(jù)
    personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203,..."}
    personDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}
    // 從這個(gè)map查找鍵為"1234"的信息
    person, ok := personDB["1234"]
    // ok是一個(gè)返回的bool型,返回true表示找到了對(duì)應(yīng)的數(shù)據(jù)
    if ok {
    fmt.Println("Found person", person.Name, "with ID 1234.")
    } else {
    fmt.Println("Did not find person with ID 1234.")
    }
    }

  2. 變參函數(shù)的語(yǔ)法糖
    func Printf(format string, args ...interface{}) {
    // ...
    }
    形如 ...type 格式的類型只能作為函數(shù)的參數(shù)類型存在,并且必須是最后一個(gè)參數(shù)。它是一個(gè)語(yǔ)法糖(syntactic sugar) ,即這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用。
    如果沒(méi)有語(yǔ)法糖,將這么寫(xiě):
    func myfunc2(args []int) {
    for _, arg := range args {
    fmt.Println(arg)
    }
    則調(diào)用方比如構(gòu)造一個(gè)數(shù)組切片來(lái)處理: myfunc2([]int{1, 3, 7, 13})

  3. 觸發(fā)錯(cuò)誤處理panic和recover的處理
    defer func(){
    if r: = recover(); r != nil{
    log.Printf("Runtime error caught: %v", r)
    }
    }()

    foo()
    

    無(wú)論foo()是否觸發(fā)了錯(cuò)誤處理流程,該匿名defer函數(shù)

最后編輯于
?著作權(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)容