go(6)-固定数组-动态数组-slice

1.固定数组
2.动态数组
3.slice声明方式(4种)
4.slice追加与截取



1.固定数组
 长度固定,传参的时候,严格匹配数组类型

 

var myArray1 [10]int
myArray2 :=[10]int{1,2,3,4}
myArray3 :=[4]int{11,22,33,44}


package main

func printArray(myArray [4]int){
	for index,value := range myArray{
		fmt.Println("index =",index,",value=",value)
	}
}

func main1(){
	//固定长度的数组
	var myArray1 [10] int
	myArray2:=[10] int{1,2,3,4}

	for i:=0;i<len(myArray1);i++{
		fmt.Println(myArray1[i])
	}

	for index,value := range myArray2 {
		fmt.Println("index =",index,",value=",value)
	}
	//查看数组的数据类型
	fmt.Printf("myArray1 types = %T\n",myArray1)
	fmt.Printf("myArray2 types = %T\n",myArray2)
	fmt.Printf("myArray3 types = %T\n",myArray3)
     
	printArray(myArray3)

}


2.动态数组
 

//声明
myArray := []int{1,2,3,4}
//引用传递
func printArray(myArray []int){}

package main
import "fmt"
func printArray(myArray []int){
	//引用传递 _匿名变量
	for _,value :=range myArray{
		fmt.Println("value=",value)
	}
    myArray[0]=100

}

func main(){
	myArray:=[]int{1,2,3,4} //动态数组,切片slice
	fmt.Printf("myArray type is %T\n",myArray)

	printArray(myArray)
	fmt.Println("===========")

	for _,value := range  myArray{
		fmt.Println("value=",value)
	}

}

3.slice声明方式
 

package main
import "fmt"
func main(){
    //1.声明slice 是一个切片并初始化,默认值为1,2,3 长度len 为3
    slice1:=[] int{1,2,3}
    //2.声明slice1是一个切片 ,但没有分配内存空间
    var slice1 []int
    //slice1= make([]int,3)            //开辟个空间,默认值为0

    //声明slice1是一个切片并分配空间
    var slice1 []int=make([]int,3)

    //声明slice1是切片,分配空间,初始值为0
    slice1 :=make([]int,3)

    fmt.Printf("len=%d,slice=%v\n",len(slice1),slice1)  //%v显示全部

    //判断一个silce是否为0
    if slice1==nil{
         fmt.Println("slice1 是一个空切片")
    }else{
         fmt.Println("slice1 是有空间的")
    }
}


4.slice追加与截取
4.1切片的扩容



当超过5时,再开辟一次的容量是5.
len :指针的距离。
cap:顶层数据末尾的容量,成倍增长。
扩容,超过容量时是成倍的扩的。

func main(){
//1.设置容量和不设置容量
var numbers=make([]int,3,5)  //设置容量
var numbers=make([]int,3)    //不设置容量
//2.添加元素
numbers=append(numbers,1)
fmt.Printf("len= %d,cap=%d,slice= %v\n",len(numbers),cap(numbers),numbers)
numbers=append(numbers,2)

//3.已满时,追加
numbers=append(numbers,3)
fmt.Printf("len= %d,cap=%d,slice= %v\n",len(numbers),cap(numbers),numbers)


}

 4.2切片的截取:
 

//下标截取与Python一样
package main
import "fmt"
func main(){
     s:=[] int{1,2,3}   //len=3,cap=3,[1,2,3]
     //[0,2]
     s1 :=s[0:2]
     fmt.Println(s1)
     s1[0]=100

     fmt.Println(s)
     fmt.Println(s1)

     //copy 深拷贝
     s2 :=make([]int,3)
     copy(s2,s)

 


版权声明:本文为aggie4628原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。