go語法知識--切片、結構體


切片,可以看成動態的數組,不需要指定具體的長度。結構體,就是一種可以將各種類型整合成一個大整體的方式,比如學生:姓名,性別,年齡,愛好。。。

 

一、切片   go語言的切片內存結構:地址,大小和容量。

  從連續內存區域(數組,或切片)生成切片是常見的操作!

 

 

1.1 聲明切片的方法 

  1)直接聲明切片

    var name []Type     

備注:(1)與數組唯一的區別,就是這里不能指定長度!

    (2)使用append方法,向切片添加元素!

 

實例:var   nameSlice1   []string

   nameSice1 =  append(nameSice1 , "zhangsan")

      nameSice1 =  append(nameSice1 , "lisi")

  2) 使用make()構造切片

    make( []Type, size, cap )

備注:(1)make() 函數生成的切片一定發生了內存分配操作

        更加精確控制,預分配的長度,空間大小

   (2)可以直接給前size元素賦值,新元素依舊需要append添加

實例: nameSice2  := make([]string 2, 10)

      nameSice2[0] = "zhangsan")

   nameSice2 =  append(nameSice2 , "wangwu)

 

1.2 給新切片賦值

  從連續內存區域(數組,或切片)中得到切片:變量名[開始位置 : 結束位置]
  1)切出的個數:結束位置-開始位置
  2)切出的元素,不包含結束位置的元素
  3)最后一個元素:變量名[len(變量名)]
  4)缺省開始位置,從頭開始
  5)缺省結束位置,到結束為止
  6)兩個都缺省,則本身
  7)兩個都是0,表示空切片

實例:  var     arr[ 10] int  = [10]int{0,1,2,3,4,5,6,7,8,9}

  切片1:var   silice1  []int = arr[5:10]           //取出個數:10-5=5 ;切出結果:[5,6,7,8,9]

      切片2:  var  slice2  []int  = arr[:2]    //取出前兩個數;切出結果:[ 0,1]

   切片3:  var  slice3 []int  = arr[8:]  //取出后兩個數;切片結果:  [8,9]

 

1.3 相關的API

  (1)復制       copy( destSlice, srcSlice []T) int

    copy() 可以將一個數組切片復制到另一個數組切片中,如果加入的兩個數組切片不一樣大,就會按照其中較小的那個數組切片的元素個數進行復制!返回值是實際復制個數

實例:

  slice1 := []int{1, 2, 3, 4, 5}
  slice2 := []int{5, 4, 3}
  copy(slice2, slice1) // 只會復制slice1的前3個元素到slice2中
  copy(slice1, slice2) // 只會復制slice2的3個元素到slice1的前3個位置

 

 二、結構體     自定義新的類型的方法,可以由0或多個任意類型的值聚合的實體。

 2.1 結構體定義

tyoe 類型名 struct {
  字段1 字段1類型
  字段2 字段2類型
  ...
}

其中,成員(or稱為 字段),包含以下特性:1)字段必須擁有自己的類型和值;2)字段名必須唯一;3)字段也可以是結構體,如果是自身則必須是指針

     訪問成員,都是使用.來實現,比如:  結構體變量.字段名

實例: XY坐標系下的點:

type Point struct {
  x int
  y int
}

2.2 實例化 根據結構體定義,定義結構體變量,俗稱實例化。

實例化方法,有三種:1)使用var實例化;2)使用new實例化;3)使用結構體地址實例化

  1)使用var來實例化: var ins T

  2)使用new創建指針來實例化:ins := new(T)

  3)使用結構體地址實例化:ins := &T{}

      取地址實例化是最廣泛的一種結構體實例化方式!

 

實例:XY坐標系下的一個節點A

  var   A    Ponint

  pA  := new(Point)

  pA := &Point{}

 

2.3  初始化結構體變量的方式

   給結構體的成員賦值的方法有兩種:1)鍵值對,給部分變量賦值;2)值列表,初始化所有變量。

  1)鍵值對 格式:   

    ins := 結構體類型名{
      字段1: 字段1的值,
      字段2: 字段2的值,
      …
    }

  2)值列表  格式:   

    ins := 結構體類型名{
      字段1的值,
      字段2的值,
      …
    }

備注:(1)鍵值對,可對部分變量賦值,不需要的可以不賦值。鍵值對,不要求順序!

   (2)值列表,必須給出全部字段的值。順序與結構體定義一致,包括類型。

           (3)鍵值對和值列表,不可以混用!!!

 

實例:XY坐標系下的一個節點A(3,4)

  鍵值對:

    A =  Point{

      x:     3,

      y:     4,

    }

  值列表:

    A = Point{3,4}

 

《遺漏點,后續補充》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM