Go語言當中的數組(array)和切片(slice)

字號+ 編輯: IT男在阿里 修訂: 种花家 來源: 利志分享 2023-09-10 我要說兩句(0)

通過代碼案例講解Go語言數據類型當中的數組以及切片,從中尋找他們的使用槼律。

package main

import(
    "fmt"
)

func main(){
    //數組定義
    //數組是Go語言編程中最常用的數據結構之一。顧名思義,數組就是指一系列同一類型數據的集合。數組中包含的每個數據被稱爲數組元素( element),一個數組包含的元素個數被稱爲數組的長度。是值類型。
    //數組有3種創建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN}

    arr1 := [5] int {1,2,3,4,5} //創建數組大小爲5
    arr2 := [5] int {1,2} //創建數組大小爲5,但是内容沒寫的用0替代了
    arr3 := [...] int {1,2,3,5} //數組未定義長度
    arr4 := [5] int {2:4,3:5,4:3} //數組有key value
    arr5 := [...] int {2:3,4:5} //數組長度未定義,並且是key,value形式
    arr6 := [...] string{"my girl","my lift"}
    arr5[1] = 99

    //arr5[6] = 88 這是錯誤的賦值方式,數組不支持最大的key進行賦值。
    fmt.Println(arr1,arr2,arr3,arr4,arr5,arr6)

    arr := [...] int {11,12,13,14,15,16}

    //切片的定義
    //Go語言中,切片是長度可變、容量固定的相同的元素序列。Go語言的切片本質是一個數組。容量固定是因爲數組的長度是固定的,切片的容量即隱藏數組的長度。長度可變指的是在數組長度的範圍内可變。
    //Go語言提供了數組切片( slice)這個非常酷的功能來彌補數組的不足。初看起來,數組切片就像一個指向數組的指針,實際上它擁有自己的數據結構,而不僅僅是個指針。數組切片的數據結構可以抽象爲以下3個變量: 一個指向原生數組的指針; 數組切片中的元素個數; 數組切片已分配的存儲空間。
    //切片的創建有4種方式:1)make ( []Type ,length, capacity ) 2)  make ( []Type, length)  3) []Type{}  4) []Type{value1 , value2 , ... , valueN }

    // s := [] int {1,2,3} 直接初始化切片,[]表示是切片類型,{1,2,3}初始化值依次是1,2,3.其cap=len=3
    s1 := [] int {1,2,3}

    // s := arr[:] 初始化切片s,是數組arr的引用
    s2 := arr[:]

    // s := arr[startIndex:endIndex] 將arr中從下標startIndex到endIndex-1 下的元素創建爲一個新的切片
    s3 := arr[0:2]

    // s:= arr[startIndex:] 缺省endIndex時將表示一直到arr的最後一個元素
    s4 := arr[3:]

    // s := arr[:endIndex] 缺省startIndex時將表示從arr的第一個元素開始
    s5 := arr[:3]

    // s := s1[startIndex:endIndex] //通過切片s初始化切片s1
    s6 := s1[1:2]

    // s := make([]int,len,cap) 通過内置函數make()初始化切片s,[]int 標識爲其元素類型爲int的切片
    s7 := make([]int,2)

    //定義string類型的切片
    s8 := []string{"hello", "my boy", "you is beauty"}

    fmt.Println(s1,s2,s3,s4,s5,s6,s7)

    //循環數組的元素
    for i:=0; i<len(arr6); i++ {
        fmt.Println("arr6[",i,"] =", arr6[i])
    }

    //循環數組的元素
    for k,v := range arr6 {
        fmt.Println("arr6[",k,"] =", v)
    }

    //循環切片
    for i:=0;i<len(s8);i++ {
        fmt.Println("s8[",i,"]=",s8[i])
    }
    for k,v := range s8 {
        fmt.Println("s8[",k,"]=",v)
    }

    //切片的追加
    s9 := make([]string,10,20)
    s9 = append(s9,"hehe test")
    fmt.Println(s9)
    s10 := []string{"hello","this","is","new"}
    s10 = append(s8,s9...)
    fmt.Println(s10)
}

作者群: 110824698 歡迎各位Go語言學習愛好者加入。

閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評