golang笔记05

map

map的基本介绍

map是 key-value数据结构,又称为字段或者是关联数组,类似其他编程语言的集合,在编程中经常被使用

map的声明

基本语法:

var 变量名 map[keytype]valuetype

  • golang中的map中的[key]可以是多种类型
    通常为int、string

  • slice\map\function不可以

  • valuetype的类型基本和keytype一样
    通常为int\string\map

声明的举例

var a map[string]string
var a map[string]int
map hero map[string]map[string]string

一开始的时候map不会分配空间,必须要先用make分配空间
案例演示:

func main(){  
    heroes := make(map[string]string)
    heroes["hero1"] : "宋江"
    heroes["hero2"] : "武松"
    fmt.Println(heroes)//第一种
    
//第二种
    var a map[string]string
    a = make(map[string]string,10)//这里的十是指的是个数,必要的时候要用append进行扩展
    
//第三种:
heroes := map[string]string{
    "hero1" = "无用"
    "hero2" = "林聪"
}

}

课堂演示:

//用key-value类型演示,存放1个学生的信息,每一个学生要有name还有sex信息
func main() {  
    var stud map[string]string
    stud = map[string]string//stud := make(map[string]string)
    stud["stu1"]["name"] = "jack"
    stud["stu1"]["sex"] = "男"
}

map的增加和减少查找和删除

  • 增加:key还没有,就是增加

  • 减少:使用内置函数delete:delete(map变量名,“key”)
    假如我们要删除map中所有的key,没有一个专门的方法一次删除,可以遍历一个key,一个一个删除

func main() {  
    var stud map[string]string
    stud = map[string]string
    stud["stu1"]["name"] = "jack"
    stud["stu1"]["sex"] = "男"
     for key,_ := range stud{
        delete(stud,"key")
     }//实现了删除

或者我们还可以直接重新定义
再次使用
stud = map[string]string//这样就实现了全部删除

  • 查找:
    案例演示:需要使用
val,findRex := stud["stu1"]
//其中需要说明的是val返回的是stud["stu1"]表示的值
//findRex返回的是一个bool型true或者是false,找到了就是true,没有找到就是false
    if findRex {
        fmt.Println(“有stu1的值 为%n”,val)
    }else {
          fmt.Println(“没有stu1的值 %n”)
    }

对上面代码的说明:如果stud含有“stu1”就会返回一个true,否则就会返回一个true

map遍历

案例演示相对复杂的map遍历
使用的是for-range结构

var monsters map[string]map[string]string
	monsters = make(map[string]map[string]string)
	monsters["mon01"] = make(map[string]string)
	monsters["mon01"]["name"] = "白骨精"
	monsters["mon01"]["sex"] = "女"
	monsters["mon01"]["age"] = "1000"

	monsters["mon02"] = make(map[string]string)
	monsters["mon02"]["name"] = "狮子王"
	monsters["mon02"]["sex"] = "man"
	monsters["mon02"]["age"] = "10085"

	monsters["mon03"] = make(map[string]string)
	monsters["mon03"]["name"] = "白蛇女"
	monsters["mon03"]["sex"] = "女"
	monsters["mon03"]["age"] = "1600"
	fmt.Println(monsters)
	//运用for - range进行遍历monsters
	for k1,v1 := range monsters{
		fmt.Println("key =",k1)
		for k2,v2 := range v1{
			fmt.Printf("\t%v = %v\n",k2,v2)
		}
	}//与二维数组近似相同一样的for-range结构

运行结果:
key = mon01
name = 白骨精
sex = 女
age = 1000
key = mon02
name = 狮子王
sex = man
age = 10085
key = mon03
name = 白蛇女
sex = 女
age = 1600

map的长度

使用的是len,len(map)返回的是map有几对

map切片

案例演示:

package main

import (
	"fmt"
)

func main() {
	//map切片
	monslice := []map[string]string
	monslice = make([]map[string]string,3)

	if monslice[0] == nil{
		monslice[0] = make(map[string]string,2)
		monslice[0]["name"] = "jack"
		monslice[0]["adress"] = "北京"
	}

	if monslice[1] == nil{
		monslice[1] = make(map[string]string,2)
		monslice[1]["name"] = "mary"
		monslice[1]["adress"] = "北京"
	}

	if monslice[2] == nil{
		monslice[2] = make(map[string]string,2)
		monslice[2]["name"] = "jsith"
		monslice[2]["adress"] = "北京"
	}

	newMonslice := map[string]string{
		"name" : "tom"
		"adress" :"上海"
	}

	monslice = append(monslice.newMonslice)//这就是进行append增加
}

map使用细节

1)map是引用类型,遵循的是引用类型传递的机制,在一个函数接收map,修改后,会直接修改原来的map

2)map的容量达到最大后,在想要增加map容量,会自动的扩展,不会发生panic,也就是说map能够动态增长

3)map的value也经常使用的是struct类型,更加适合管理负责的数据

struct

  • Golang也支持面向像编程(OOP),但是和传统的面向对象编程有区别,并不是存粹的面向对象,所以我们一般是说golang支持golang面向对象编程特性是比较精准的

  • go语言的面向对象是基于结构体(struct)来实现oop特性的

  • 其中golang非常的简洁,去掉了传统的oop语言的继承,方法重载,构造函数和解析函数、隐藏的this函数指针等等

  • golang依然有面向对象编程的继承、封装和堕胎的特性,只是实验oop的特性和其他的语言不一样

快速入门

package main
import (
	"fmt"
)

type Student struct{
    Name string
    Age int
    Adress string
}
func main() {
	//第一种方法定义
    var student01 Student
    student01.Name = "jack"
    student01.Age = 10
    student01.Adress = "北京"
    //第二种方法:
    var stu Student = Student{"mary",18,"上海"}
    //方法三:
    //运用new
    var stu02 *Student = new(Student)
    //这里可以用两种方法
    //1.
    *(stu02).Name = "sith"
    *(stu02).Age = 17
    *(stu02).Adress= "深圳"
    
    stu02.Name = "sith"
    stu02.Age = 17
    stu02.Adress= "深圳"//这样也是,可以的golang设置方便
    //方法4:
    var stu04 *Student = &Student{//里面可以写变量,也可以不写,不写就像上面的new一样}
}

字段

struct里面的属性是字段

1)字段的一般表示的方式是 字段名 字段型

2)字段的类型可以为:基本类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值