golang中怎麼判斷一個變量是array還是slice?


區分數組和切片的區別:

  • 1.數組是固定長度的,長度一旦確定無法修改,無法變長也無法變短。而切片容量大小是可以伸縮的
  • 2.數組是值類型,切片是指針類型


進一步代碼舉例說下兩者的區別:

(1)通過反射弧判斷Array還是Slice

<code>func main() {
\tarr1 := [3]int{1,2,3} //指定長度Array
\tslice1 := []int{1,2,3} //不指定長度

\t//注:Slice就是長度可變的Array

\t//反射弧判斷是Array還是Slice
\tfmt.Println(reflect.TypeOf(arr1).Kind())
\tfmt.Println(reflect.TypeOf(slice1).Kind())
}/<code>

輸出:

<code>array
slice/<code>

(2)指定長度和不指定長度初始化的不同

<code>  arr1 :=[3]int{1,2,3}        //指定長度Array
\tarr2 := [...]int{1,2,3} //不指定長度Array

\tslice1 :=make([]int,3) //指定長度Slice
\tslice2 := []int{1,2,3} //不指定長度Slice/<code>


(3)函數傳值

Array值傳遞

<code>func main() {
\tarr1 := [3]int{1, 2, 3}

\tfunc(arr [3]int) {
\t\tarr[0] = 7
\t\tfmt.Println(arr)
\t}(arr1)

\tfmt.Println(arr1)
}/<code>

輸出:

<code>[7 2 3]
[1 2 3]/<code>

Slice指針傳遞

<code>func main() {
\tslice1 := []int{1, 2, 3}

\tfunc(arr []int) {
\t\tarr[0] = 7
\t\tfmt.Println(arr)
\t}(slice1)

\tfmt.Println(slice1)
}/<code>

輸出:

<code>[7 2 3]
[7 2 3]/<code>


golang中怎麼判斷一個變量是array還是slice?

聰明出於勤奮,天才在於積累。


分享到:


相關文章: