C#/JAVA 程序員轉GO/GOLANG程序員筆記大全(DAY 02)

------------------- 指針
go 保留的 c 語言指針的操做,同時增長了自動垃圾回收機制
var a = new(int)
*a = 666   // &a 內存地址

-------------------- 數組
// 定義
var a [5]int
b := [5]int {1, 2, 3, 4, 5}
// 下標賦值
c := [5]int {2: 10, 4: 20}
// 多維數組
var a [5][5]int
b := [5][5]int {{...}, {...}, {...}}


-------------------- slice 切片
// 切片不是數組成數組指針,(數組傳參是值傳遞,切片傳參是引用傳遞)
// 它經過內部指針喝相關屬性引用數組片斷,以實現變長方案
a := [...]int {1, 2, 3}
a := []int{}
a := make([]int, 0, 1) // 容量1
slice := array[0:3:5] 
// [low:high:max] 
// low:下標的起始 、 high:下標的終點、max:容量
// 若是超過原來的容量,一般是以 2 倍的容量來擴容

// append 切片尾部增長元素

-------------------- map
var m1 map[int]string
m2 := map[int]string {
        1: "loong",
        2: "chao"
}
// 指定長度
m3 := make(map[int]string, "length")
// 遍歷
for key, value := range m1 {
    // ...
}
// 判斷key是否存在
value, isExitst := m1[1]  // 對象[key]
// 刪除list
delete(m, 1) // (對象, key)


-------------------- 結構體
// 語法
type Student struct {
    id int
    name string
}
var stu = Student { 1, "loong" }
var stu2 = Student
stu2.id = 1
stu2.name = "loong"
stu3 := new(Student)
stu4 := Student{id: 1}
// 匿名字段的用法
type Person struct {
name string
   sex byte
age int
}

type Student struct {
   Person // 匿名字段
id int
addr string
}

s := Student{ Person:Person{name: "loong", sex: 'm', age: 18}, id: 1, addr: "ShenZhen"}x := Student{ "loong", 'm', 18, 1, "ShenZhen" }
相關文章
相關標籤/搜索