Go指南學習筆記

2021-08-20 06:46:13 字數 4071 閱讀 5303

1.1 hello,世界

1.2 go 本地化

1.3 go 離線版

1.4 go 練習場

2.1 包——每個go程式都是由包構成的。

2.2 匯入

2.3 匯出名

2.4 函式

2.5函式(續)——當連續兩個或多個函式的已命名形參型別相同時,除最後乙個型別以外,其它都可以省略。

2.6 多值返回

2.7命名返回值——go的返回值被命名,它們被視作定義在函式頂部的變數。返回值的名稱應當有一定的意義,它可以作為文件使用。直接返回語句應當僅用在短函式中,在長函式中它們會影響**的可讀性。

2.8變數——var 語句用於宣告乙個變數列表,跟函式的引數列表一樣,型別在最後。

2.9變數的初始化——如果初始化值已存在,可以省略型別。

2.10 短變數宣告——:=結構不能在函式外使用。

2.11基本型別

bool

string

int     int8     int16     int32     int64

uint    uint8   uint16  uint32    uint64 uintptr

byte //uint8的別名

rune //int32的別名

//表示乙個unicode碼點

float32    float64

complex64    complex128//複數

2.12零值 ——沒有明確初始值的變數宣告會被賦予它們的零值

零值是:

數值型別為0

布林型別為false

字串為「」(空字串)

2.13型別轉換——表示式t(v)將值v轉換為型別t。

2.14型別推導——在宣告乙個變數而不指定其型別時(即使用不帶型別的:=語法或var=表示式),變數的型別由右值推導得出。

2.15常量 ——常量宣告與變數類似,只不過是使用const 關鍵字。

2.16數值常量——數值常量是高精度的值。

3.0 for——go只有一種迴圈結構:for迴圈

基本的for迴圈由三部分組成,它們用分號隔開:

初始化語句:在第一次迭代前執行 通常為一句短變數宣告,該變數宣告僅在for語句的作用域中可見。

條件表示式:在每次迭代前求值 一旦表示式的布林值為false 迴圈迭代就會終止。

後置語句:在每次迭代的結尾執行

3.1 for(續)——初始化語句和後置語句是可選的。

3.2for是go中的「while」——此時你可以去掉分號。

func main()

fmt.println(sum)

}3.3 無限迴圈

3.4 if

3.5 if的簡短語句

3.6if和else

3.7switch ——是編寫一連串if-else 語句的簡便方法。自動提供所需的break語句,除非以fallthrough語句結束否則分支自動終止。case 對應的表示式 取值 不必為整數。

3.8switch的求值順序。從上到下直到匹配成功時停止。

3.9 沒有條件的switch 同switch true一樣

3.10    defer ——會將函式推遲到外層函式放回之後執行。其被推遲的函式引數會立即求值。

3.11    defer棧——推遲的函式呼叫會被壓入乙個棧中。當外側函式返回時,被推遲的函式會按照後進先出的順序呼叫。

4.0    指標——go擁有指標。指標儲存了值得記憶體位址。型別*t是指向t型別值得指標。其零值為nil。&操作符會生產乙個指向其運算元的指標。*操作符表示指標指向的底層值

func main()

4.1    結構體——乙個結構體就是乙個欄位的集合。

type vertex struct

var s int = primes[1:4]

fmt.println(s)

}4.7    切片就像陣列的引用——切片並不儲存任何資料,它只是描述底層陣列中的一段。更改切片的元素會修改其底層陣列中對應的元素。與它共享底層陣列的切片都會觀測到這些修改。

4.8    切片文法——切片文法類似於沒有長度的陣列文法。

[3]bool

bool 會建立乙個和上面相同的陣列,然後構建乙個引用了它的切片。

func main()

fmt.println(q)

r := bool

fmt.println(r)

s := struct ,,,

,,,}

fmt.println(s)

}4.9    切片的預設行為——切片下界的預設值為0,上界則是該切片的長度。

4.10    切片的長度和容量——切片的長度和容量可通過表示式len(s)和cap(s)來獲取。

4.11    nil 切片——切片的零值是nil。nil切片的長度和容量為0且沒有底層陣列。

4.12    用make建立切片——make函式會分配乙個元素為零值得陣列並返回乙個引用了它的切片。

a := make(int, 5)  // len(a)=5

b := make(int, 0, 5) // len(b)=0, cap(b)=5

4.13    切片的切片——切片可以包含任何型別,甚至包括其它切片。

func main() ,

string,

string,

}// the players take turns.

board[0][0] = "x"

board[2][2] = "o"

board[1][2] = "x"

board[1][0] = "o"

board[0][2] = "x"

for i := 0; i < len(board); i++

}4.14    for迴圈的range 形式可以變了切片或

對映。每次遍歷都會返回兩個值。第乙個為當前元素下標,第二個為該下標對應元素的乙份副本。

func main()

4.15    range(續)  ——可以將下標或值賦予_ 來忽略它。若你只需要索引,去掉value的部分即可。

func main()

for _, value := range pow

}4.16    對映——對映將鍵對映到值,零值為nil,nil的對映即沒有鍵,也不能新增鍵。make函式會返回給定型別的對映,並將其初始化備用。

type vertex struct

var m map[string]vertex

func main()

fmt.println(m["bell labs"])

}

4.17    對映的文法—— 宣告變數並賦值。

type vertex struct

var m = map[string]vertex,

"google": vertex,

簡寫形式如下

var m = map[string]vertex,

"google":    ,

4.18    修改對映

插入或修改

m[key]=elem

獲取元素

elem =m[key]

刪除元素

delete(m,key)

通過雙向賦值檢測某個鍵是否存在

elem,ok:=m[key]//key在m 中 ok為true,否則 ok 為false。 elem則為元素型別的零值。

4.19    函式值——函式也是值。它們可以像其它值一樣傳遞。函式值可以用作函式的

引數或返回值。

func compute(fn func(float64, float64) float64) float64

func main()

fmt.println(hypot(5, 12))

fmt.println(compute(hypot))

fmt.println(compute(math.pow))

4.20    函式閉包——閉包是乙個函式值,它引用了其函式體之外的變數。該函式可以訪問並賦予其引用的變數的值,換句話說,該函式被繫結在這些變數上。

func adder() func(int) int

}func main()

}

Go學習筆記

使用關鍵字var定義變數,自動初始化為零值。如果提供初始化值,可省略變數型別。在函式內部,可用更簡略的 方式定義變數。空白符號 package main import fmt func test 2,0 函式內部 定義變數陣列data 0 data 1 data 2 並賦值0,1,2,且i 0 i,...

go學習筆記

那些打不倒你的,終將讓你變的更強 package main import fmt func main 輸出結果 num1的型別是 int,數值是 30 num2的型別是 int,數值是 40 name的型別是 string,數值是 zhangshang sum的型別是 int,數值是 30 1 2 ...

Go學習筆記

go語言型別宣告語句 一 宣告變數 var 基本資料型別 1.整型 基礎型別 變數的宣告 變數的字面值為整型 var a int 自動初始化為0 變數的賦值 a 100 var b 200 隱式宣告變數並初始化 var c int 300 顯式宣告型別的變數 d 400 自動推導變數的型別 w,z ...