1. 程式人生 > 實用技巧 >go語言入門

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函式命名規則:小寫字母開頭的函式只在本包內可見,大寫字母開頭的函式才能被其他包使用