Golang學習筆記

公司最近打算啓動一個新項目:實現接口級別的mock服務,技術棧需要利用Go的超強併發能力。很早就聽聞過Go的大名了,趁這個機會跟着大佬們學一學,目前還在不斷學習中,邊學習邊整理整理學習筆記。

一、包

package <name>包有兩種類型,可執行包應用包

  • 可執行包生成可執行程序,必須使用package main,而且文件中必須有且僅有一個main函數。
  • 應用包本身是不可執行的,編寫保存後會自動在pkg目錄下保存一個.a文件,包內可以有多個源文件,其中被引用的方法需要設置爲:首字母大寫.。設置包名name時一般與文件名相同,但這並不是必須的。

import <packagename>導入源碼文件所依賴的包,導入的包其實就是目錄名。Go程序首先會去“GOROOT/src”目錄下找,如果沒找到則會繼續去“GOPATH/src”找。

二、數組VS切片

切片是擁有相同類型元素的可變長度的序列,數組是不可變的,可以理解爲切片是指向數組的某塊區域的引用,可以是數組的一部分也可以是全部。

1.切片的初始化

  • 數組:
    var name [num]T默認初始化,有默認值
    var name = [num]T{n1,n2,…}使用指定值初始化
  • 切片:
    var name []T聲明一個切片,未初始化,爲nil(切片、函數、指針變量的默認爲nil)
    var name = []T{n1,n2,…}初始化一個切片,不爲nil

可以看出: 數組和切片初始化的明顯也是唯一的區別就是數組必須定義長度,而切片不用定義長度。這也體現了它們的不可變長度與可變長度的特點。

2.得到切片

  1. 初始化切片
  2. 利用數組得到切片
    a := [4]int{1,2,3,4}初始化一個數組
    b := a[1:3]//左閉右開,包含a[1],a[2]:[2,3]
  3. 切片再切片
    c := b[0:2]//包含a[1],a[2]:[2,3]
    d := b[1:3]//包含a[2],a[3]:[3,4]
  4. 構造切片
    使用make()函數構造,make([]T,size,cap)// size: 切片中元素的數量;cap: 切片的容量
    a := make([]int,5,10)
    則:len(a);//5 cap(a);//10 (內存空間給切片分配了10個,只使用了5個。)

關於切片的類型和實質,我畫了個圖應該可以看的很清楚。切片是引用類型,一個切片包含三個部分:指針、長度、容量,下圖可見,該切片指向底層數組a[2],長度爲4,容量爲7。
(圖片:slice)

3.遍歷

  1. 索引遍歷:for i := 0; I < len(s); i++{}
  2. for range遍歷:for index, value := range{}

4.用append()方法爲切片添加元素

  • 切片會自動擴容,容量會按1,2,4,8,16,…… 擴充
    利用方法:s = append(s, i)把元素 i 添加到切片中的元素後

5.用copy()方法複製切片

  • 如果直接把切片1的值賦給切片2,那麼它們實際上使用的是同一個底層數組修改其中任意一個切片的值都會影響另一個切片,因此需要用其他方法來複制切片:copy(destSlice, srcSlice)destSlice:目標切片,srcSlice: 源切片

6.刪除切片中的元素

  • 切片是引用類型,不像數組一樣長度空間都十分固定,要刪除切片的元素,可以利用它的特性:
    s := []int{0,1,2,3,4,5}
    s = append(s, a[:3],a[4:])//刪除第3個元素
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章