陣列存在的問題:定義完,長度固定,不易擴充套件
切片:長度不固定,可以追加元素,可以理解成「動態陣列」,但不是陣列
func
main()
//3.使用make函式建立
//make(型別,長度(初始化空間),容量(初始化和空閒))
//長度不能大於容量,第三個引數可以省略
s :=
make([
]int,3
,5) fmt.
println
(cap
(s))
//cap函式獲取容量
}
func
main()
fmt.
println
(s)//追加資料
s =(s,99
,100
)//修改
s[0]
=78fmt.
println
(s[0])
函式s :=
make([
]int,3
,10) fmt.
println
(s) s[0]
=10//此法容易新增下標越界
//使用迴圈方式新增,小於的是長度,而不是容量
for i:=
0;i<
len(s)
;i++
//追加
s =(s,80
)}
func
main()
for i:=
0;i<
len(s)
;i++
for i,v =
range s
}
func
main()
s1 := s[0:
3:5]
fmt.
println
(s1)
//列印結果是3,5,6
fmt.
println
(cap
(s1)
) fmt.
println
(len
(s1)
)//s[:]
s1 := s[:]
fmt.
println
(s1)
//將切片的值全部列印出來
fmt.
println
(cap
(s1)
) fmt.
println
(len
(s1)
)//s[low:]
s1 := s[3:
]//從下標為3開始擷取
//s[:high]
s1 := s[:3
]//從0下標開始擷取到下標3前擷取
//s[low:high]
s1 := s[1:
3]//從1下標開始擷取到下標3前擷取
}
func
main()
s[0]
=30//修改
fmt.
println
(s)
s1 := s[2:
5]//不包含下標為5
fmt.
println
("s1="
,s1)
//3,4,5
//***修改新切片的值,舊切片的值也會發生改變***
//新切片指向了舊切片,都是同乙個切片
s1[0]
=80fmt.
println
("s1="
,s1)
//3,4,5
fmt.
println
("s="
,s)//
}
func
main()
func
main()
s1 :=
intcopy
(s1,s2)
//s1長度不夠,只能拷貝兩個值,s1變為3,4
copy
(s2,s1)
//同樣只變化前兩個值
}
func
main()
s :=
intinit
(s)}
func
init
(num [
]int
)//*************************************
//注意:切片在函式中修改切片的值,會影響到原切片
// 陣列在函式中修改陣列的值,不會影響到原陣列
}
Golang切片學習筆記
在 golang 中可以通過多種方式建立和初始化切片。是否提前知道切片所需的容量通常會決定如何建立切片。1.1 通過 make 函式建立切片 使用 golang 內建的 make 函式建立切片,此時需要傳入乙個引數來指定切片的長度 建立乙個整型切片 其長度和容量都是 5 個元素 slice make...
golang 切片學習
package main 這裡只說些自己理解的,當然切片的操作遠遠不止這些。import fmt reflect 學習切片首先要明白len和cap的區別。len 是儲存資料多少,cap 是容量大小。舉個例子乙個大會堂可以容納1000人這是cap,但是實際裡面隻座了100人這是len func mai...
golang筆記 Slice切片
sliceslice代表變長的序列,序列中每個元素都有相同的型別。語法和陣列很像,只是沒有固定長度。引用型別 動態陣列 從概念上來說,slice像乙個結構體,這個結構體包含了三個元素 乙個指標,指向陣列中slice指定的開始位置 長度,即slice的長度 最大長度,也就是slice開始位置到陣列的最...