golang 8. 陣列 切片
阿新 • • 發佈:2021-06-27
陣列 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]
*/
}