陣列切片和函式

2022-09-04 23:54:21 字數 3696 閱讀 1431

// 資料是存放元素的容器

// 必須指定存放的元素的型別和容量(長度)

// 陣列的長度是陣列型別的一部分

var a1 [3]bool // [false false false]

var a2 [4]bool // [false false false false]

fmt.prinf("a1:%v a2:%v\n",a1,a1)

// 陣列的初始化

// 如果不初始化:預設元素都是零值(布林值:false,整型和浮點型都是0,字串:"")

fmt.println(a1,a2)

// 1.初始化方法1

a1 = [3]bool

fmt.println(a1)

// 2. 初始化方式2:根據初始值自動推算陣列的長度是多少

// a10 :=[9]int

a10 := [...]int

fmt.println(a10)

// 3初始化方式3;根據索引來初始化

a2 := [5]int

fmt.println(a3)

// 陣列的遍歷

citys := [...]string

// 索引:0~2 citys[0],citys[1],citys[1]

// 1 根據索引遍歷

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

// 2 for range遍歷

for i,v := range citys

// 陣列是值型別

b1 := [3]int // [1 2 3]

b2 := b1 // [1 2 3]

b2[0] = 100 //b2:[100 2 3]

fmt.println(b1,b2) // b1:[1 2 3]

切片只想了乙個底層的陣列

切片的長度就是它元素的個數

切片的容量是底層陣列從切片的第乙個元素到最後乙個元素

// 切片的定義

var s1 int // 定義乙個存放int型別元素的切片

var s2 string // 定義乙個存放string型別元素的切片

fmt.println(s1,s2)

fmt.println(s1 == nil) // true

fmt.println(s2 == nil) // true

// 初始化

s1 := int

s2 := string

fmt.println(s1,s2)

fmt.println(s1 == nil) // false

fmt.println(s2 == nil) // false

// 長度和容量

fmt.printf("len(s1):%d cap(s1):%d",len(s1),cap(s1))

fmt.printf("len(s2):%d cap(s2):%d",len(s2),cap(s2))

make()函式用於建立指定長度和容量的切片

s1 := make(int,5,10)

fmt.printf("len(s1):%d cap(s1):%d",len(s1),cap(s1))

s2 := make(int,0,10)

fmt.printf("len(s2):%d cap(s2):%d",len(s2),cap(s2))

切片就是乙個框,框住了一片連續的記憶體

切片屬於引用型別,真正的資料都是儲存在底層的陣列裡面

判斷乙個切片是否是空,要使用len(s)==0來判斷

fmt.printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))

fmt.printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))

ss := string

fmt.printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))

a1 :=  int

a2 := a1 //賦值

var a3 = make(int,3,3)

copy(a3, a1) // copy

fmt.println(a1, a2, a3)

a1[0] = 100

fmt.println(a1, a2, a3)

go語言中不存在指標操作,只需要記住兩個符號:

&:取位址

*:根據位址取值

make和new都是用來申請記憶體的

new很少用,一般用來給基本資料型別申請記憶體,stringint,返回的是對應型別的指標(*string、*int)。

make是用來給slicemapchan申請記憶體的,make函式返回的的是對應的這三個型別本身

map也是引用型別,必須初始化之後才能使用。

func main()  else 

// map的遍歷

for k, v := range m1

// 只遍歷key

for k := range m1

// 只遍歷value

for _, v := range m1

// 刪除

delete(m1, "a")

fmt.println(m1)

delete(m1, "c") // 刪除不存在的key

}

// 函式

// 函式存在的意義?

// 函式是一段**的封裝

// 把一段邏輯抽象出來封裝到乙個函式中,給它起個名字,每次用到它的時候直接用函式名呼叫就可以了

// 使用函式能夠讓**結構更清晰、更簡潔。

// 函式的定義

func sum(x int, y int) (ret int)

// 沒有返回值

func f1(x int, y int)

// 沒有引數沒有返回值

func f2()

// 沒有引數但有返回值的

func f3() int

// 返回值可以命名也可以不命名

// 命名的返回值就相當於在函式中宣告乙個變數

func f4(x int, y int) (ret int)

// 多個返回值

func f5() (int, string)

// 引數的型別簡寫:

// 當引數中連續多個引數的型別一致時,我們可以將非最後乙個引數的型別省略

func f6(x, y, z int, m, n string, i, j bool) int

// 可變長引數

// 可變長引數必須放在函式引數的最後

func f7(x string, y ...int)

// go語言中函式沒有預設引數這個概念

func main()

陣列 切片 字典 函式

目錄 1 陣列 切片 2 字典 3 函式 陣列和切片的區別就是乙個是固定長度乙個不固定。定長陣列 不定長陣列 names string字典和python的字典一樣的,也是key value。儲存的key是經過雜湊運算的。2.1 宣告方式 注意點1!使用字典一定要先分配空間 注意點2!在map中不存在...

陣列,切片和字典

1 陣列 array 陣列是乙個有相同資料型別的元素組成的固定長度的有序集合,如 var x 5 int,使用var定義的陣列,預設值如果整型為0,浮點型為0.0,字串為 物件為nil。求整型陣列之和,使用range函式,遍歷陣列 切片 字典時,返回索引和元素值 當對某個返回值不感興趣時,要用下劃線...

golang 陣列和切片

陣列和切片的建立func main output 1 0 ps 陣列宣告時,所有元素預設值都是0。一般很少這樣做,盡量自己初始化。func main output panic runtime error index out of range goroutine 1 running main.main...