1,map
1.1,map的介绍
1.2,map的基本语法演示
package main
import "fmt"
func main() {
//第一种声明方式
var a map[string]string
//在使用map前要先make,不然直接赋值或报错,因为还没给map声明内存空间
//a["no1"]= "宋江" //报错
/**
第二个参数:设置map大小,可以扩容
注意:map中的key默认是无序的
*/
a=make(map[string]string,3)
a["no1"]= "宋江"
a["no2"]= "卢俊义"
a["no3"]= "武松"
a["no3"]= "林冲"
a["no3"]= "林冲"
a["no4"]= "鲁智深"
a["no5"]= "顾三娘"
fmt.Println(a)
fmt.Println(len(a))
fmt.Println(a["no3"])
fmt.Println("============")
for s := range a {
value:=a[s]
fmt.Println(value)
}
//第二种声明方式
a2 := make(map[string]string)
a2["大师兄"]="孙悟空"
a2["二师兄"]="猪八戒"
a2["三师兄"]="沙悟净"
fmt.Println(a2)
//第三种声明方式
var a3 map[string]string = map[string]string{
"大姐姐":"林黛玉",
"二姐姐":"薛宝钗",
"三姐姐":"王熙凤",
}
fmt.Println(a3)
}
1.3,map的crud
package main
import "fmt"
func main() {
a2 := make(map[string]string)
a2["no1"]="孙悟空"
a2["no2"]="猪八戒"
a2["no3"]="沙悟净"
fmt.Println(a2)
//新增,修改 no3如果存在就修改,不存在就新增
a2["no3"] = "沙悟净~"
fmt.Println("新增,修改:",a2)
//删除 key存在则删除 key不存在则不操作但是也不报错
delete(a2, "no3")
fmt.Println("删除:",a2)
//查询 key不存在则查不出东西,但是不报错
fmt.Println("查询:",a2["no3"])
}
1.4,map的遍历
package main
import "fmt"
func main() {
a2 := make(map[string]string)
a2["no1"]="孙悟空"
a2["no2"]="猪八戒"
a2["no3"]="沙悟净"
for key, value := range a2 {
fmt.Println("key=>",key)
fmt.Println("value=>",value)
}
}
1.5,map的切片
package main
import "fmt"
func main() {
monsters := make([]map[string]string,2)
for i := range monsters {
monsters[i] = make(map[string]string,2)
monsters[i]["name"]="牛魔王"+string(i);
monsters[i]["age"]="5"+string(i);
}
fmt.Println(monsters)
}
2,struct
2.1,面向对象编程介绍
2.2,struct演示
package main
import "fmt"
//首字母大写说明这个结构体可以公开
type Cat struct {
Name string
Age int
Color string
Hobby string
}
func main() {
cat1 :=Cat{"小花",23,"花色","吃鱼"}
fmt.Printf("&cat1==%p>",&cat1)
fmt.Println(cat1)
fmt.Println("Name==>",cat1.Name)
fmt.Println("Age==>",cat1.Age)
fmt.Println("Color==>",cat1.Color)
fmt.Println("===============")
fmt.Println("&Name==>",&cat1.Name)
fmt.Println("&Age==>",&cat1.Age)
fmt.Println("&Color==>",&cat1.Color)
}
2.3,结构体声明
package main
import "fmt"
//如果结构体的字段是slice和map的零值都是nil说明还没分配空间
//如果需要使用这样的字段需要先make才能使用
type Person struct {
Score []string
ptr *int
slice []int
map1 map[string]string
}
func main() {
var p1 Person
fmt.Println(p1)
//使用切片时要先make
p1.slice = make([]int,4)
p1.slice[0]= 100
fmt.Println(p1)
//a:= map[string]string{
// "no1":"大师兄",
//}
//p1.map1 = a
//fmt.Println(p1)
//var slice2 [] int = make([] int,4,8)
//p1.slice = slice2
//fmt.Println(p1)
}
2.4,创建结构体的4种方式
package main
import "fmt"
//方式一
type Person2 struct {
Score []string
ptr *int
slice []int
map1 map[string]string
}
type Person3 struct {
Name string
Age int
}
func main() {
//方式二
p2 := Person3{"李乃龙",25}
fmt.Println(p2)
//方式三
var p3 *Person3 = new(Person3)
p3.Name="刘娟"
p3.Age=18
fmt.Println(p3)
//方法四
var p4 *Person3 = &Person3{}
p4.Name="刘娟2"
p4.Age=181
fmt.Println(p4)
}
2.5,结构体使用细节
2.6,验证第4点
package main
import (
"encoding/json"
"fmt"
)
type Person4 struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
p4:=Person4{"牛魔王",54}
jsonstr,_ := json.Marshal(p4);
fmt.Println(string(jsonstr))
}
3,方法
3.1,方法的介绍
3.2,方法的使用
package main
import "fmt"
type Person struct {
Name string
}
//给Person类型绑定方法
func (person Person) test(hoddy string) {
fmt.Println("我叫",person.Name)
fmt.Println("我喜欢",hoddy)
}
func test(hoddy string) {
fmt.Println("我喜欢",hoddy)
}
func main() {
var p1 Person;
p1.Name="李乃龙"
p1.test("做饭")
test("洗衣服")
}
3.2,方法的快速入门
package main
import "fmt"
type Person2 struct {
Name string
}
//给Person类型绑定方法
func (person Person2) test(hoddy string) string {
return "我喜欢"+hoddy
}
func main() {
var p2 Person2
res := p2.test("敲代码")
fmt.Printf(res)
}