一.陣列的定義
//var 變數名 [陣列的容量]型別 = [陣列的容量]型別{值1,值2}
var a [4]int = [4]int{1,2,3}
或者
var a = [4]int{1,2,3}
或者
a := [4]int{1,2,3}
//這幾個的結果為[1 2 3 0]
//接受長度有賦值的長度決定
package main
import "fmt"
func main(){
var a = [...]int{1,2,3}
//a :=[...]int{1,2,3}
//但是無法使用var a [...]int = [...]int{1,2,3}
//只能var a [3]int = [...]int{1,2,3}
fmt.Println(a)
}
//結果為[1 2 3]
二.切片的定義
var a []int = []int{1,2,3}
或者
var a = []int{1,2,3}
或者
a := []int{1,2,3}
//另外種方式用make創建
var a []int=make([]int,4,6) //長度4,容量6
var a []int=make([]int,4) //長度4,容量4
//只定義,沒有賦值,空值是nil型別
func main(){
var a []int
if a ==nil{
fmt.Println("我是空的")
}
}
//切片全部取值
for i,v:=range 切片物件{
fmt.Println(i) //索引
fmt.Println(v) //值
}
三.關于陣列與切片之間的轉換以及原理
轉換
//如果有陣列a := [4]int{1,2,3,4}
//我們要取第二個
b :=a[1]
//取第二個和第三個
b :=a[1,3]
//取第二個到最后一個
b :=a[1:]
//此時切片的b的長度由切區陣列的個數決定
//此時切片的b的容量由切區陣列從切的位置到陣列末尾位置
補充
- 長度:len()
- 容量:cap()
原理
陣列變成索引其實切片就相當于創建了一個索引指向陣列
四.關于切片與陣列之間發生變化
情況一:當切片和陣列未發生資料增加
切片或者陣列里值發生變化,其對應陣列或者切片均會受到影響
情況二:當切片發生資料增加(未超過容量)
比如
package main
import "fmt"
func main(){
a := [3]int{1,2,3}
var b = a[1:2]
b= append(b,33)
fmt.Println(a,b)
}
//列印結果[1 2 33] [2 33]
//兩個會相互受影響
情況三:當切片發生資料增加(超過容量)
package main
import "fmt"
func main(){
a := [3]int{1,2,3}
var b = a[1:2]
b= append(b,33,3)
fmt.Println(a,b)
}
//列印結果[1 2 3] [2 33 3]
//兩個不會受影響
//其實他底層發生了這樣一件事件
//如果超過定長,底層會重新復制切片那一段資料且容量為原先的兩倍
//而此時切片b的所有指向的位置也發送改變改變為新開辟出來的那段資料
五.靈魂畫師畫,情況三變化程序

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/61786.html
標籤:Go
上一篇:java安裝問題解決(環境變數;沒有jre;離線安裝與jar檔案關聯)
下一篇:shiro報錯求大佬指教一下
