go語言學習--基礎篇(3)

來源:互聯網
上載者:User

標籤:64位   make   size   結果   語言   不能   記憶體   fun   style   

一,go語言數組

     1,數組的特點

          a. 數組在初始化完成之後,數組的長度是固定的

             b. 只儲存同一類型的資料

             c. 數組中的元素與元素之間的記憶體空間是連續的

      2,數組的定義

             var a [5]int     其中a 表示數組的名稱,[5]表示數組的長度,int 表示數組中的元素類型

      3,數組中元素的訪問

              使用下標訪問 a[0],a[1],a[2]

      4,迴圈擷取數組每個元素的地址

package mainimport (       "fmt")func main() {       var a [10]int       for i :=0;i <10; i++{             fmt.Printf("%p\n", &a[i]}    }}輸出結果:                                        #明顯每個元素佔8個位元組,而且是連續的0xc04206e050                                    #int 類型所佔的記憶體空間和作業系統有關 64位作業系統,int 佔64位,即8個位元組0xc04206e058                                     0xc04206e0600xc04206e0680xc04206e0700xc04206e0780xc04206e0800xc04206e0880xc04206e0900xc04206e098

        5,數組長度

             var  a[10]int   length := len(a)

         6,數組存在越界問題

              var  a[10]int 長度為10,下標範圍為0到9。訪問0到9之外的小標會報錯

         7,數組的遍曆

/* range 遍曆數組 */package mainimport ("fmt")func main() {var a [10]intfor index,val := range a{fmt.Printf("a[%d] = %d\n",index,val)}}

 

           8, 實值型別

func test() {     var a [5]int = [5]int {1,2,3,4,5}     var b [5]int     b = a     fmt.Printf("b=%v\n",b)     b[0] = 200          fmt.Printf("b=%v\n",b)     fmt.Printf("a=%v\n",a)}#輸出結果為#b=[1 2 3 4 5]#b=[200 2 3 4 5]#a=[1 2 3 4 5]#從中可以看出改變數組b中的元素,並不會改變數組a中的元素,這就是實值型別

        9,數組的初始化

              a. var a[5] int = [5]int {1,2,3,4,5}

              b. var a = [5]int{1,2,3,4,5}

              c. var a = [...]int{1,2,3,4,5}  其中[...]表示不確定長度

              d. var a = [5]string{1:"abc",2"eft"}  表示給數組a的前兩個元素賦值為a[0]=abc,a[1]=eft

      10,二維數組定義

              var a[8][2]int   定義一個8行2列的數組

 

二,切片

     切片的長度是動態,任何切片底層都為數組

      1,切片的定義, 與數組的定義唯一的區別就是沒有長度,並且預設長度為0

            var  變數名 [ ] type

           a. var  a [] string

           b. var  a [] float32

      2,切片的初始化(切片為參考型別)

           var  a [5] int

           var  b []int = a [0:2]

           var  b []int = a [2:]

           var  b []int = []int{1,2,3,4,5}

     3,樣本思考

         可以看出a 的值改變,相應的切片b的值也會變,說明切片為指標類型或者參考型別

package mainimport("fmt")func main(){var a [5]intb :=a[1:3]a[0] =100a[1] =200fmt.Printf("b:%#v\n",b)                         }

輸出為:
b:[]int{200,0}

          4,切片的記憶體布局

               x 為一個切片,切片的形式包含三個內容,指向底層數組的指標,定義切片的長度和切片的容量

           5,傳數組與傳切片

package mainimport ("fmt")func Sum(b []int){b[0] = 100}func SumArry(b [100]int){b[0] = 100}func main(){var a [100]inta[0] = 1a[1] = 2a[2] = 3Sum(a[:])fmt.Printf("a:%d\n",a[0])a[0] = 1                                                #重設a[0]的值SumArry(a)fmt.Printf("a:%d\n",a[0])}#輸出為                                  #a:100#a:1#從輸出結果可以看出 傳入參數為切片時,底層數組的值可以被改變,當傳入是數組時,數組的值不能改變,#再次說明切片為指標類型或者參考型別,而數組為數實值型別

           6,切片的建立

            var  b []int

            b = make([]int,5,10)

            a. 指定切片容量 make([]type,len,cap)

            b. 不指定切片容量,容量就等於長度 make([]type,len),

            注意:

                  以make 方式建立一個數組,其底層也一個數組,有make 建立

           

            7,切片的記憶體操作copy 和 append 操作,append 會對切片進行擴容,增加記憶體

            將一個切片append 到另一個切片 

func testAppend(){         var a []int         a = make([]int,5)         var b[]int = []int{10,11,12,14}         a =append(a,b...)                       #b... 展開切片b的所有元素         ftm.Printf("a:%#v\n",a)}

 

          8,字串的記憶體布局

           在go 語言中,字串也是一個切片,記憶體布局如

            a,ptr 為指標

            b,len為長度,

            c,容量也就是長度

            d,類型為byte

  

          9,修改字串中某個字元

func testStrSlice() {          var str = ‘hello world"          var b []byte = []byte(str)                   #請字串轉化成切片          b[0] = ‘a‘                                         #修改切片第一個值          str1 :=string(b)                                 #將切片轉化成string          fmt.Printf("str1:%s\n",str1}

 

 

 

           

go語言學習--基礎篇(3)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.