go語言學習 基礎篇(3)

2022-09-03 12:00:08 字數 3086 閱讀 3726

一,go語言陣列

1,陣列的特點

a. 陣列在初始化完成之後,陣列的長度是固定的

b. 只儲存同一型別的資料

c. 陣列中的元素與元素之間的記憶體空間是連續的

2,陣列的定義

var a [5]int     其中a 表示陣列的名稱,[5]表示陣列的長度,int 表示陣列中的元素型別

3,陣列中元素的訪問

使用下標訪問 a[0],a[1],a[2]

4,迴圈獲取陣列每個元素的位址

package main

import (

"fmt"

)func main()

}}輸出結果: #明顯每個元素佔8個位元組,而且是連續的

0xc04206e050 #int 型別所佔的記憶體空間和作業系統有關 64位作業系統,int 佔64位,即8個位元組

0xc04206e058

0xc04206e060

0xc04206e068

0xc04206e070

0xc04206e078

0xc04206e080

0xc04206e088

0xc04206e090

0xc04206e098

5,陣列長度

var  a[10]int   length := len(a)

6,陣列存在越界問題

var  a[10]int 長度為10,下標範圍為0到9。訪問0到9之外的小標會報錯

7,陣列的遍歷

/* range 遍歷陣列 */

package main

import (

"fmt"

)func main()

}

8, 值型別

func test() 

var b [5]int

b = a

fmt.printf("b=%v\n",b)

b[0] = 200

fmt.printf("b=%v\n",b)

fmt.printf("a=%v\n",a)

}#輸出結果為

#b=[1 2 3 4 5]

#b=[200 2 3 4 5]

#a=[1 2 3 4 5]

#從中可以看出改變陣列b中的元素,並不會改變陣列a中的元素,這就是值型別

9,陣列的初始化

a. var a[5] int = [5]int

b. var a = [5]int

c. var a = [...]int  其中[...]表示不確定長度

d. var a = [5]string  表示給陣列a的前兩個元素賦值為a[0]=abc,a[1]=eft

10,二維陣列定義

var a[8][2]int   定義乙個8行2列的陣列

二,切片

切片的長度是動態的,任何切片底層都為陣列

1,切片的定義, 與陣列的定義唯一的區別就是沒有長度,並且預設長度為0

var  變數名 [ ] type

a. var  a string

b. var  a float32

2,切片的初始化(切片為引用型別)

var  a [5] int

var  b int = a [0:2]

var  b int = a [2:]

var  b int = int

3,示例思考

可以看出a 的值改變,相應的切片b的值也會變,說明切片為指標型別或者引用型別

package main

import(

"fmt"

)func main()

輸出為:

b:int

4,切片的記憶體布局

x 為乙個切片,切片的形式包含三個內容,指向底層陣列的指標,定義切片的長度和切片的容量

5,傳陣列與傳切片

package main

import (

"fmt"

)func sum(b int)

func sumarry(b [100]int)

func main()

#輸出為

#a:100

#a:1

#從輸出結果可以看出 傳入引數為切片時,底層陣列的值可以被改變,當傳入是陣列時,陣列的值不能改變,#再次說明切片為指標型別或者引用型別,而陣列為數值型別

6,切片的建立

var  b int

b = make(int,5,10)

a. 指定切片容量 make(type,len,cap)

b. 不指定切片容量,容量就等於長度 make(type,len),

注意:以make 方式建立乙個陣列,其底層也乙個陣列,有make 建立

}8,字串的記憶體布局

在go 語言中,字串也是乙個切片,記憶體布局如下圖

a,ptr 為指標

b,len為長度,

c,容量也就是長度

d,型別為byte

9,修改字串中某個字元

func teststrslice()

go語言學習3(變數)

go 語言變數名由字母 數字 下劃線組成,其中首個字元不能為數字。宣告變數的一般形式是使用 var 關鍵字,格式 var 變數名 變數型別 舉例 var test string 也可以同時宣告多個變數,格式 var 變數名1,變數名2 變數型別 舉例 var test1,test2 string t...

Go語言學習筆記(3)

1 go的協程本質上還是系統的執行緒呼叫,而python中的協程是eventloop模型實現,所以雖然都叫協程,但並不是乙個東西 encoding json 知識點1type m structjson反序列化成inte ce 對number的處理 當沒有指定型別的時候,預設情況下,json中的數字型...

GO語言學習二(基礎)

一 包 每個 go 程式都是由包組成的。程式執行的入口是包main 二 匯入 兩種方式 多個 import import fmt import math 用圓括號組合了匯入,打包匯入 import fmt math 三 函式 函式可以沒有引數或接受多個引數 當兩個或多個連續的函式命名引數是同一型別,...