go語言入門
我在這區別式C進行總結知識點
1.增加資料型別
字典map
package main import "fmt" func main() { testmap := make(map[string]int) //表示建立一個key為string,value的值為int的資料型別。 testmap["dont"] = 24 fmt.Println(testmap) }
陣列切片(類似於stl中的vector容器)
package main import "fmt" func main() { var numbers []int //宣告一個數組 printSlice(numbers)/* 允許追加空切片 */ numbers = append(numbers, 0) printSlice(numbers) /* 向切片新增一個元素 */ numbers = append(numbers, 1) printSlice(numbers) /* 同時新增多個元素 */ numbers = append(numbers, 2,3,4) printSlice(numbers) /* 建立切片 numbers1 是之前切片的兩倍容量*/ numbers1 := make([]int, len(numbers), (cap(numbers))*2) /* 拷貝 numbers 的內容到 numbers1*/ copy(numbers1,numbers) printSlice(numbers1) }
func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) }
2.函式多返回值的特性,對於忽略不關心的返回值可以使用“_”來佔位填充。
3.錯誤處理:
defer():延遲呼叫,多個defer,依次入棧,在函式即將退出時,依次出棧呼叫
package main import "fmt" func main() { defer func() { fmt.Println("defer one") }() defer func() { fmt.Println("defer two") }() defer func() { fmt.Println("defer three") }() }
panic():單獨使用其後的程式碼不會執行;
與defer結合使用,panic觸發錯誤,defer依次出棧呼叫,沒有recover捕獲的情況下,最後才打印錯誤;
與defer、recover結合使用,panic觸發錯誤,defer依次出棧呼叫,直到被recover捕獲,列印捕獲的資訊,之後繼續defer出棧。
recover():只有在defer中呼叫,才有效,否則返回nil
4.併發程式設計
啟動goroutine模式,即啟動協程,搭配channel(通道)聯合使用
goroutine是go語言中併發的執行單位。channel是go語言中各個goroutine之間的通訊機制
package main import "fmt" func main(){ messages := make(chan string) go func(){messages <- "ping"} }
5.反射
反射就是用來檢測儲存在介面變數內部(值value;型別concrete type) pair對的一種機制。
基本功能:
①TypeOf:獲取目標物件的型別,TypeOf:獲取目標物件的值
示例:
package main import ( "fmt" "reflect" ) func main() { var num float64 = 1.2345 fmt.Println("type: ", reflect.TypeOf(num)) fmt.Println("value: ", reflect.ValueOf(num)) } 執行結果: type: float64 value: 1.2345
②獲取介面資訊
③設定實際變數的值
④進行方法的呼叫
參考連結:https://studygolang.com/articles/12348?fr=sidebar
6.對於常量的賦值是編譯器行為,故右值不能出現任何需要執行期才能得出結果的表示式
7.預定義變數“itoa:0”,預設值為0,每遇到一個const就被重置為0,進行下一次從0累加。
8.迴圈方式:採用for、range
9.內建函式make(型別,引數)——建立變數
10函式命名規則:小寫字母開頭的函式只在本包內可見,大寫字母開頭的函式才能被其他包使用