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包,一個工程中有且僅有
三、名稱首字母大小寫
常量、變數、型別、介面、結構、函式等的名稱開頭大小寫區別,小寫表示私有,跟其他語言不一樣(類的私有),這裡的私有是包的私有,包內還是可以呼叫的,大寫表示公有,包外也可以呼叫
四、大括號
開大括號不能單獨一行,比如主函式
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++的陣列)