切片,可以看成动态的数组,不需要指定具体的长度。结构体,就是一种可以将各种类型整合成一个大整体的方式,比如学生:姓名,性别,年龄,爱好。。。

 

一、切片   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}

 

《遗漏点,后续补充》

posted on 2020-06-05 08:41  远远A心  阅读(2253)  评论(0编辑  收藏  举报