- array数组 [10,给一个固定的长度]int{1,2,3,…} ,并且创建后数组的元素值不可改。
- slice切片【动态数组】[]int{…}
- map 哈希表
// 推荐切片, 动态数组. 空间可以动态开辟
slice := []int{1,2,3,4}
var slice []int = make([]int, 3)
for i := 0; i < 4; i++ {
if i < len(slice) {
slice[i] = i
} else {
slice = append(slice, i)
}
}
slice := make([]int, 3)
fmt.Printf("array type is %T, value is %d", slice, len(slice))
cap(slice) //切片容量
%v, 把详细信息都打出来
// 切片传递时是引用传递,方法可以改切片
追加切片
append(slice, 123)
拷贝切片 copy(newslice, orislice)
s2 := make([]int, 4)
for i := 0; i < 4; i++ {
if i < len(slice) {
slice[i] = i
} else {
slice = append(slice, i)
}
}
copy(s2, slice)
map 是一个指针
和切片区别主要为一个为int,一个类型多种
引用传递
//删除:
delete(myMap)
//遍历:
for key, value := range myMap{
fmt.Println("key= ", key)
fmt.Println("value= ", value)
}
var myMap map[string]string
if myMap == nil{
fmt.Println("myMap 是空map")
}
myMap = make(map[string]string, 10) //用之前分配内存空间, 可以不写,自动追加容量
myMap["one"] = "apple"
myMap["two"] = "bear"
myMap["three"] = "random"
fmt.Println(myMap)
// 一般用这种看着清晰点。
myMap2 := map[string]string{
"one": "php",
"two": "c++",
"three": "python",
}
fmt.Println(myMap2)
固定数组
func main() {
//var array [10]int
array := [10]int{1, 2, 3, 4, 5, 1, 2, 3, 4, 5}
for i := 0; i < len(array); i++ {
fmt.Println(array[i])
}
}
1
2
3
》。。。到10. 也可以不声明全,默认就是0
array := [10]int{1, 2, 3, 4}
for i := 0; i < len(array); i++ {
fmt.Println(array[i])
}
1
2
3
4
0
0
0
0
0
0
0
func printArray(array [4]int) {
for index, value := range array {
fmt.Println("index是", index, "value是", value)
}
array[0] = 111 //改不了,值拷贝,array 原地址值不会改
}