Go基础(6)-map和struct以及方法

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)
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值