切片,可以看成動態的數組,不需要指定具體的長度。結構體,就是一種可以將各種類型整合成一個大整體的方式,比如學生:姓名,性別,年齡,愛好。。。
一、切片 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}
《遺漏點,后續補充》
