// 資料是存放元素的容器
// 必須指定存放的元素的型別和容量(長度)
// 陣列的長度是陣列型別的一部分
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很少用,一般用來給基本資料型別申請記憶體,string
、int
,返回的是對應型別的指標(*string、*int)。
make是用來給slice
、map
、chan
申請記憶體的,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...