From ad8d5d9b79342a8be4399d47265ab04666cc5bb1 Mon Sep 17 00:00:00 2001 From: Tinywan <756684177@qq.com> Date: Sat, 26 May 2018 09:19:56 +0800 Subject: [PATCH] demo cpde --- demo/map-001.go | 28 ++++++++++ demo/slice-002.go | 64 ++++++++++++++++++++++ demo/struct-001.go | 130 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+) create mode 100644 demo/map-001.go create mode 100644 demo/slice-002.go create mode 100644 demo/struct-001.go diff --git a/demo/map-001.go b/demo/map-001.go new file mode 100644 index 0000000..62c8a42 --- /dev/null +++ b/demo/map-001.go @@ -0,0 +1,28 @@ +package main + +import "fmt" + +func main(){ + // 方式一 + var m map[int]string // 声明一个map + fmt.Println(m) + m = map[int]string{} // 初始化一个map + fmt.Println(m) + + // 方式二 + var m2 map[int]string = map[int]string{} + fmt.Println(m2) + + // 方式三 + m3 := map[int]string{} + fmt.Println(m3) + + // 设置、获取、删除 + m3[1] = "Tinywan" + a := m3[1] + fmt.Println(m3) // map[1:Tinywan] + fmt.Println(a) // Tinywan + + delete(m3,1) // 删除一个map + fmt.Println(m3) // map[] +} \ No newline at end of file diff --git a/demo/slice-002.go b/demo/slice-002.go new file mode 100644 index 0000000..9f68f21 --- /dev/null +++ b/demo/slice-002.go @@ -0,0 +1,64 @@ +package main + +import "fmt" + +func main() { + a := [10]int{1,2,3,4,5,6,7,8,9} + var s1 []int + fmt.Println(s1) // 输出:[] + + // 只取一个元素 + s2 := a[5] + fmt.Println(s2) // 输出:6 + + // 只取前5个元素 + s3 := a[:5] + fmt.Println(s3) // 输出:[1 2 3 4 5] + + // 只取后5个元素 + s4 := a[5:] + fmt.Println(s4) // 输出:[6 7 8 9 0] + + // 截取某一段元素,不包括最后一个 + s5 := a[5:8] + fmt.Println(s5) // 输出:[6 7 8] + + // 使用make创建一个切片 + s6 := make([]int, 3, 10) // func make([]T, len, cap) []T 可以用来创建切片 + fmt.Println(len(s6),cap(s6)); + + s7 := []byte{'a','b','c','d','e','f','g','h','i','j','k'} // 切片底层对应的数组 + + slice_a := s7[2:5] + fmt.Println(slice_a) // 输出的assica码 值 [99 100 101] + fmt.Println(string(slice_a)) // 格式化为字符串输出 + fmt.Println(len(slice_a),cap(slice_a)) + + slice_b := s7[3:5] + fmt.Println(string(slice_b)) // 格式化为字符串输出 + + // append 函数使用 + s8 := make([]int, 3, 6) // 3个元素,容量为6的切片 + fmt.Printf("%p\n", s8) // 打印内存地址:0xc042074030 + s8 = append(s8, 12, 48) + fmt.Printf("%v %p", s8, s8) // 格式化打印值和内存地址:[0 0 0 12 48] 0xc042074030 + + // 追加的元素如果没有超多切片容量,则切片的地址是不变的,否则内存地址会变 + s8 = append(s8, 66, 88) + fmt.Printf("%v %p\n", s8, s8) // [0 0 0 12 48 66 88] 0xc042048060 + + // copy 使用 + s9 := []int{1,2,3,4,5,6,7} + s10 := []int{33,44,55} + copy(s9,s10) // copy(拷贝,被拷贝) + fmt.Println(s9) //[33 44 55 4 5 6 7] + + copy(s10,s9) + fmt.Println(s10) // [33 44 55] + + copy(s9[2:4],s10[0:2]) + fmt.Println(s9) // [1 2 33 44 5 6 7] + + s11 := s7[:] + fmt.Println(s11) // copy一个数组的所有 +} \ No newline at end of file diff --git a/demo/struct-001.go b/demo/struct-001.go new file mode 100644 index 0000000..2bc44f4 --- /dev/null +++ b/demo/struct-001.go @@ -0,0 +1,130 @@ +package main + +import "fmt" + +const ( + MethodGet = "GET" + MethodHead = "HEAD" + MethodPost = "POST" + MethodPut = "PUT" + MethodPatch = "PATCH" // RFC 5789 + MethodDelete = "DELETE" + MethodConnect = "CONNECT" + MethodOptions = "OPTIONS" + MethodTrace = "TRACE" +) + +type Person struct { + Name string + Age int + Contact struct { + Phone, City string + } +} + +// 组合的使用,嵌入结构的使用,被嵌入的结构体相当于把自己所有属性给予了需要嵌入的结构体中 +type Hourman struct { + Sex int +} + +type Teacher struct { + Hourman // 继承 Hourman 所有 + Name string + Age int +} + +type Student struct { + Hourman // 继承 Hourman 所有 + Name string + Age int +} + + +func main() { + sr1 := Person{} + fmt.Println(sr1) + + sr2 := Person{} + sr2.Name = "Tinywan" + sr2.Age = 24 + fmt.Println(sr2) + + sr3 := Person{ + Name: "Tinywan Default", + Age: 25, + } + fmt.Println(sr3) // {Tinywan Default 25} + A(sr3) // 传递值 {A Tinywan 25} + fmt.Println(sr3) // {Tinywan Default 25} + + //传递指针 + sr4 := Person{ + Name: "Tinywan Default", + Age: 25, + } + fmt.Println(sr4) // {Tinywan Default 25} + B(&sr4) // 传递地址 &{Pointer B 25} + fmt.Println(sr4) // {Pointer B 25} + + // 一般在结构体初始化的时候进行【取地址符号】,这时候被赋值的变量将会直接指向结构体的【指针】 + // 【推荐改写法】 + sr5 := &Person{ // 这里直接取地址 + Name: "Default", + Age: 24, + } + fmt.Println("Update Before :", sr5) + sr5.Name = "Update" + B(sr5) + C(sr5) + fmt.Println("Update After :", sr5) + + // 匿名 + sr6 := &struct { + Name string + Age int + }{ + Name: "nothing", + Age: 26, + } + fmt.Println("%v %p", sr6, sr6) + + //匿名结构使用 + sr7 := Person{Name: "Name01", Age: 24} + sr7.Contact.Phone = "13669361192" + sr7.Contact.City = "GanSu" + fmt.Println(sr7) + + // 赋值操作 + sr8 := Person{Name: "Name008", Age: 26} + var b Person // 这里必须声明为为Person的类型 + b = sr8 + fmt.Println(sr8) // {Name008 26 { }} + fmt.Println(b) // {Name008 26 { }} + + // 嵌入和组合的使用 + te := Teacher{Name:"Student Teacher", Age:48, Hourman: Hourman{Sex: 1}} //初始化操作 + st := Student{Name:"Wan Student", Age:24, Hourman: Hourman{Sex: 2}} + // update + te.Name = "2018 Name" + te.Age = 12 + te.Sex = 0 + fmt.Println(te,st) // {{0} 2018 Name 12} {{2} Wan Student 24} + +} + +// 传值引用 +func A(person Person) { + person.Name = "A Tinywan" + fmt.Println(person) // {A Tinywan 25} +} + +// +func B(person *Person) { + person.Name = "Pointer B " + fmt.Println(person) +} + +func C(person *Person) { + person.Name = "Pointer C " + fmt.Println(person) +}