pull/5/head
Tinywan 7 years ago
parent f35518a573
commit ad8d5d9b79

@ -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[]
}

@ -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一个数组的所有
}

@ -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)
}
Loading…
Cancel
Save