s

array就是数组:

var arr [n]type

数组也可以使用另一种简短声明符号:= 来声明

slice—-Go的动态数组

  • var fslice []int

  • 声明方式:var y []int (中括号里面不填数字大小,因为是动态的)

  • 还可以通过从一个数组或一个已经存在的slice中再次声明

    x := [10]int{1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10}
    y := x[1:3]
    fmt.Print(y)

    前闭后开,包含2但不包含4.

    结果如下:

    [2 3]
    进程 已完成,退出代码为 0
  • slice 也可以使用:=来声明

    s := make([]int , 10 , 20) //长度是10 ,真正容量是20

make关键字用来分配空间

分配

len 是长度 cap 是容量

第一个例子

package main

import (
	"fmt"
)

func main(){
	y := make([]int,3,5)       //5相当于参考容量
	y = append(y,5,6,7)        //append函数向动态数组中添加
    fmt.Print(y,cap(y))      //容量cap()
}

添加至数组长度大于容量,也没关系,go底层会自动扩宽空间

运行结果:

[0 0 0 5 6 7] 10
进程 已完成,退出代码为 0

第二个例子

package main

import (
	"fmt"
)

func main(){
	var slice []int
	slice = append(slice,1,2,3)
	fmt.Print(slice)
}

运行结果:

[1 2 3]
进程 已完成,退出代码为 0

slice 动态数组

map

声明

map[keyType]valueType

student:= make(map[string]int) map使用必须make 一下分配内存

package main
import (
	"fmt"
)
func main(){
	var student map[string]float32
	student = make(map[string]float32)     
	student["yesai"] = 18.2
	fmt.Print(student)
}

运行结果

map[yesai:18.2]
进程 已完成,退出代码为 0

也可以使用简短声明符号,声明的两行改为

student := make(map[string]float32) 

make用于内建类型(map,slice和channel)的内存分配

map无法和slice一样自动内存扩充