1. 程式人生 > >golang 基礎知識和注意事項

golang 基礎知識和注意事項

一,GOROOT和GOPATH

簡單講,

a、GOROOT是go的安裝路徑,比如/usr/local/go,把該目錄的bin加入系統的path變數

    GOPATH你程式的路徑,比如/home/user/myGoProgram;GOPATH可以是一個列表,go get下載的第三方庫, 會下載到列表的第一個目錄裡面

    GOPATH目錄下一般有三個目錄,分別是 bin、pkg、src

    bin放可執行檔案(go install 生成自己程式的可執行檔案),該目錄也要加入path變數中;

    pkg目錄存放編譯好的庫檔案, 主要是*.a檔案; 

    src目錄下主要存放go的原始檔

二、main包,一個工程中有且僅有

一個main包,包裡有且僅有一個main函式

三、名稱首字母大小寫

常量、變數、型別、介面、結構、函式等的名稱開頭大小寫區別,小寫表示私有,跟其他語言不一樣(類的私有),這裡的私有是包的私有,包內還是可以呼叫的,大寫表示公有,包外也可以呼叫

四、大括號

開大括號不能單獨一行,比如主函式

func main(){  # { 不能單獨一行

 ...

}

四、字串不能複製為nil

在golang中,string型別的變數沒有nil,只有""(空字串)

五、陣列和slice區別

切片可以理解為陣列的引用,一個有 3 個域的結構體,分別是引用、長度、容量

a、陣列是固定長度,宣告和初始化:

    1、var arr [2]int #大小為2

    2、s := [3]int{1, 2} #大小為3

    3、s := [...]int{1, 2} #大小為2,[...]是陣列

切片slice是不固定長度,

    1、var arr []int 

    2、arr := make([]int, 2,3) #容量為3,大小為2

    3、arr := []int{1, 2, 3} #實際上是陣列並且建立了相關切片

b、切片使用append函式時,容量是翻倍增長的,比如

        arr := []int{1, 2, 3}
fmt.Println(len(arr), cap(arr))  #結果3 3
arr = append(arr, 1)

fmt.Println(len(arr), cap(arr)) #結果3 6

c、陣列向函式傳遞時會複製,得到副本,不會影響原來陣列,切片是引用,會影響原來切片(類似c++的陣列)