map 综合应用实例|学习笔记

简介: 快速学习 map 综合应用实例

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map:map综合应用实例】与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9663


map 综合应用实例

内容介绍:

一、课堂练习的要求

二、案例演示

三、注意


一、课堂练习的要求

来看一下 map 的课堂练习,这个练习相对来说综合一点,使用到map的各个方面的知识点,那么来看一下这个课堂练习的要求是什么。

1.使用 map[string]map[string]string 的 map 类型

2.key表示用户名,是唯一的,不可以重复

3.如果某个用户名存在,就将其密码修改"888888",如果不存在就增加这个用户信息,(包括昵称nickname和密码pwd)。

4.编写一个函数modifyUser(users map[string]map[string]string,name string)完成上述功能

第一个首先它说使用 map,map[string]map[string]这是一个 map,key 为string,值为 map[string]string 又是一个 map。

第二个 key 表示用户名,是唯一的,不可以重复。也就是说这个 key string 表示用户名,唯一且不可重复。

第三个也就是说 map[string]string 的值里面应该怎么保存用户信息,里面应该有它的昵称和密码,应该有两对 key value。

第四个要求写一个 modifyUser 函数,modifyUser 可以接收两个参数:一个是map 本身,另一个是传一个名字进去完成上述功能。简单的说也就是传一个用户名name 进去,然后判断 map 里面有没有 users,如果有就把密码改为“888888”,如果没有就增加这个用户信息。


二、案例演示

代码实现:

在 chapter09里面新建一个文件夹叫 exercise,在此内新建一个 文件叫 main.go,从上一份文件里粘贴一份通用的代码过来,代码如下:

package main

import (

“fmt”

)

func main() {

}

然后在主函数里定义一个 map[string]map[string]string 这样的 map:

func main() {

users := make(map[string]map[string]string, 10) 

 //假设 make10个这样的类型,但它的值还是 map

modifyUser(users, “tom”)  

//把users传递进主函数里

}

再写一个函数:

func modifyUser(users map[string]map[string]string,name string){  

//首先users会传递进主函数,生成名字

//判断users中是否有name

//v , ok := users[name]  //判断v这个值,users 里有没有叫 name 的 key,通过 ok 来判断。这个判断有点麻烦,也是可以用的,但是这里用简单一点。

if users[name] != ni1{  //如果它的这个名字,users 的 map 里有这个用户了,那么它就会不等于 ni1,如果没有就会等于 ni1

//有这个用户

users[name][“pwd”] = “888888”  

//根据要求,用户名存在,密码就改为“888888”。假设密码的这个key也就是map[string]string,用户的信息其中有个 key 叫做 password。

} else {

//没有这个用户

//创建这个用户

users[name] = make(map[string]string,

2)  //第一步应该先 make 出对应的 map,至少有两对 key value。

users[name][“pwd”] = “888888”  //密码就是“888888”

users[name][“nickname”] = “昵称~”+ name  //示意

//按理说应该传一个昵称过来,但是没有传,所以这里把名字加个名称做昵称名字,是示意代码

//如果想做好一点就在 modify 函数后面加一个 nickname string,这样昵称就被传过来了,在创建用户的时候直接写就可以了。

}

}

把 users 传递进主函数里:

modifyUser(users, “tom”)

modifyUser(users, “mary”)  

//再加一个 mary

fmt.Println(users)  

//输出这个函数

//因为 users 是一个 map,所以它是引用传递,里面的修改会直接影响到外面的修改,users 也会变化。

执行这个代码。

在 cmd.exe 里输入以下命令回车:

cd..

cd exercise

go run main.go

输出:

map[tom:map[pwd:888888] nickname:昵称~tom]  mary:map[pwd:888888  nickname:昵称~mary]]

可以看到在这个 map 里就有了一个 tom,tom 这个人的信息密码是“888888“,昵称是 tom;第二个是 mary,他的信息是一个 map,密码是“888888”,昵称是 mary。和代码完全正确。

当然如果在事先放了一个 map 进去,那么就会直接改密码不改昵称了。比如在主函数中加一个用户:

users[“smith”] = make(map[string]string, 2) //因为 smith 的值对应的 map,所以也要先 make 一下,也是2个信息。

users[“smith”][“pwd”] = “999999”  //假设smith的密码是“999999

users[“smith”][“nickname”] = “小花猫”  “昵称~+ name //示意

再传一个用户为 smith:

modifyUser(users, “mary”)

那么运行时就会走if分支有这个用户的路径,smith 的密码就会变成“888888”,同时smith的昵称不会发生变化。运行一下可以得出:

map[tom:map[pwd:888888 nicknane:昵称~tom] mary:map[pwd:88888 nickname:昵称~mary] smith:map[pwd:888888nickname:小花猫]]

可以看到smith的密码被修改为“888888”了,同时它的昵称并没有发生变化,说明代码是正确的,走的是if的这个分支,而不是 else 这个分支。


三、注意

到此就把 map 的各个方面介绍完了,在后面写爬虫、流量统计的这种项目的时候都会用到 map 的相关信息,尤其是以上所讲解的这块 map,如果里面值还是 map的话,一定要清楚 make 两次,这是初学 golang 的时候容易经常犯的错误,要重视。下一个章节开始介绍 golang 里面的面向对象编程或者叫面向接口编程。

相关文章
|
5月前
|
存储 C++ 容器
【C++】学习笔记——map和set
【C++】学习笔记——map和set
33 0
|
前端开发
前端学习笔记202306学习笔记第三十八天-手写map2
前端学习笔记202306学习笔记第三十八天-手写map2
122 0
前端学习笔记202306学习笔记第三十八天-手写map2
|
6月前
|
分布式计算 JavaScript 前端开发
Stream学习笔记(二)map与reduce
Stream学习笔记(二)map与reduce
|
6月前
|
存储 JavaScript
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
48 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-什么是对象结构 set map之13
前端学习笔记202305学习笔记第二十八天-什么是对象结构 set map之13
38 0
前端学习笔记202305学习笔记第二十八天-什么是对象结构 set map之13
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
45 0
|
前端开发
前端学习笔记202305学习笔记第二十六天-什么是对象结构 set map之6
前端学习笔记202305学习笔记第二十六天-什么是对象结构 set map之6
59 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之2
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之2
40 0
|
前端开发
前端学习笔记202306学习笔记第四十二天-Es6-Map的理解2
前端学习笔记202306学习笔记第四十二天-Es6-Map的理解2
38 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之1
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之1
54 0
下一篇
无影云桌面