package main
import "fmt"
/**數(shù)組
* 定義數(shù)組數(shù)量在前類型在后
* 可以通過(guò)[...]來(lái)讓編譯器幫數(shù)有多少個(gè)
* 數(shù)組是值類型
* [5]int 和 [6]int是不同類型
* 調(diào)用func printArray(arr [5]int)會(huì)拷貝,go語(yǔ)言是值傳遞
* go語(yǔ)言中一般不直接使用數(shù)組胎源,go語(yǔ)言使用的是slice
*/
func? arrays()? {
var arr [5]int
arr1 := [3]int{1,2,3}
arr2 := [...]int{1,2,3,4,5,6}
fmt.Println(arr,arr1,arr2)
var grid [4][5]int//二維數(shù)組棉钧,表示有4行5列
? fmt.Println(grid)
//遍歷數(shù)組,普通方法
? for i :=0;i < len(arr2) ;i++? {
fmt.Println(i,arr2[i])
}
fmt.Println("range")
//使用range關(guān)鍵字
? for i,v :=range arr2 {
fmt.Println(i,v)
}
fmt.Println("_____")
//"_"跳過(guò)某一個(gè)值
? for _,v :=range arr2 {
fmt.Println(v)
}
fmt.Println("只取下標(biāo)")
//只取下標(biāo)
? for i :=range arr1 {
fmt.Println(i)
}
}
//數(shù)組是值類型
func printArray(arr [5]int)? {
arr[0] =100
? for _,v :=range arr {
fmt.Println(v)
}
}
//通過(guò)指針改變數(shù)組值
func printArray1(arr *[5]int)? {
arr[0] =100
? for _,v :=range arr {
fmt.Println(v)
}
}
//通過(guò)slice改變數(shù)組值
func printArray2(arr []int)? {
arr[1] =88
? for _,v :=range arr {
fmt.Println(v)
}
}
/** slice (切片)
* 計(jì)算機(jī)中一般是半開(kāi)半閉區(qū)間
* slice不是值類型乒融,slice是對(duì)array的一個(gè)視圖
*/
func studySlice()? {
arr := [...]int{0,1,2,3,4,5,6,7}
fmt.Println(arr[2:6])
fmt.Println(arr[:6])
fmt.Println(arr[2:])
fmt.Println(arr[:])
}
func updateSlice(arr []int)? {
arr[0] =99
}
func main() {
arrays()
fmt.Println("printArray(arr)")
var arr [5]int
printArray(arr)
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("通過(guò)指針改變數(shù)組值")
printArray1(&arr)
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("通過(guò)slice改變數(shù)組值")
printArray2(arr[:])
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("studySlice")
studySlice()
arr1 := [...]int{0,1,2,3,4,5,6,7}
s1 := arr1[2:6]
//s2 := arr1[:6]
//s3 := arr1[2:]
//s4 := arr1[:]
? fmt.Println("切片之后")
updateSlice(s1)
fmt.Println(s1)
fmt.Println(arr1)
fmt.Println("Reslice")
fmt.Println(s1)
s1 = s1[:4]
fmt.Println(s1)
s1 = s1[2:]
fmt.Println(s1)
//slice擴(kuò)展
? ? fmt.Println("slice擴(kuò)展")
}