1. 程式人生 > 其它 >golang 8. 陣列 切片

golang 8. 陣列 切片

陣列 array.go

package main

import "fmt"

func printArray(myArray [4]int) {
	//值拷貝

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

	myArray[0] = 111
}


func main() {
	//固定長度的陣列
	var myArray1 [10]int

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

	//for i := 0; i < 10; i++ {
	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)
	fmt.Println(" ------ ")
	for index, value := range myArray3 {
		fmt.Println("index = ", index, ", value = ", value)
	}
}

切片

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)
	}
}
package main

import "fmt"

func main() {
	//宣告slice1是一個切片,並且初始化,預設值是1,2,3。 長度len是3
	//slice1 := []int{1, 2, 3}

	//宣告slice1是一個切片,但是並沒有給slice分配空間
	var slice1 []int
	//slice1 = make([]int, 3) //開闢3個空間 ,預設值是0

	//宣告slice1是一個切片,同時給slice分配空間,3個空間,初始化值是0
	//var slice1 []int = make([]int, 3)

	//宣告slice1是一個切片,同時給slice分配空間,3個空間,初始化值是0, 通過:=推匯出slice是一個切片
	//slice1 := make([]int, 3)

	fmt.Printf("len = %d, slice = %v\n", len(slice1), slice1)

	//判斷一個silce是否為0
	if slice1 == nil {
		fmt.Println("slice1 是一個空切片")
	} else {
		fmt.Println("slice1 是有空間的")
	}
}
package main

import "fmt"

func main() {
	var numbers = make([]int, 3, 5)

	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers), cap(numbers), numbers)

	//向numbers切片追加一個元素1, numbers len = 4, [0,0,0,1], cap = 5
	numbers = append(numbers, 1)

	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers), cap(numbers), numbers)

	//向numbers切片追加一個元素2, numbers len = 5, [0,0,0,1,2], cap = 5
	numbers = append(numbers, 2)

	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers), cap(numbers), numbers)

	//向一個容量cap已經滿的slice 追加元素,
	numbers = append(numbers, 3)

	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers), cap(numbers), numbers)

	fmt.Println("-=-------")
	var numbers2 = make([]int, 3)
	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers2), cap(numbers2), numbers2)
	numbers2 = append(numbers2, 1)
	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers2), cap(numbers2), numbers2)
	
	numbers2 = append(numbers2,2)
	numbers2 = append(numbers2,3)
	numbers2 = append(numbers2,4)
	fmt.Printf("len = %d, cap = %d, slice = %v\n", len(numbers2), cap(numbers2), numbers2)
	
	// cap * 2 
	/*
	len = 3, cap = 5, slice = [0 0 0]
	len = 4, cap = 5, slice = [0 0 0 1]
	len = 5, cap = 5, slice = [0 0 0 1 2]
	len = 6, cap = 10, slice = [0 0 0 1 2 3]
	-=-------
	len = 3, cap = 3, slice = [0 0 0]
	len = 4, cap = 6, slice = [0 0 0 1]
	len = 7, cap = 12, slice = [0 0 0 1 2 3 4]
	*/
}
package main

import "fmt"

func main() {
	s := []int{1, 2, 3} //len = 3, cap = 3, [1,2,3]

	//[0, 2)
	s1 := s[0:2] // [1, 2]

	fmt.Println(s1)

	s1[0] = 100

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

	//copy 可以將底層陣列的slice一起進行拷貝
	s2 := make([]int, 3) //s2 = [0,0,0]

	//將s中的值 依次拷貝到s2中
	copy(s2, s)
	fmt.Println(s2)

	/*
	[1 2]
	[100 2 3]
	[100 2]
	[100 2 3]
	*/
}