main.go
// Go语言Map
package main
// 包的本质是创建不同的文件夹
// go的每一个文件都是属于一个包的
// go以包的形式管理项目和文件目录。
// import "包的路径"
import (
utils "day18/model/utils"
_"fmt"
)
var content string = `
————————————————Go语言Map————————————————————
一、map
`
func main() {
utils.Entry()
}
utils.go
// Go语言Map
package utils
import (
"fmt"
"sort"
)
var layout string = "2006-01-02"
// 全局变量
var Author string = "Jhou Shuai"
// 全局变量
var Description string = "Go语言Map"
//全局变量:使用反引号来定义多行字符串
var Content string = `
————————————————Go语言Map————————————————————
一、map
1.map是key-value数据结构,称为字段或关联数组
var 变量名 map[keytype]valuetype
key的数据类型:
bool、数字、string、指针、channel
通常:int、string
value的数据类型:
bool、数字、string、指针、channel、map
通常:int float string struct map
var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[int]string
map声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用
`
type Stu struct {
Name string
Age int
Address string
}
/**
* [Init 入口]
* @author Jhou Shuai
* @datetime 2019-05-18T11:58:33+0800
*/
func Entry() {
userApplication()
}
/**
* [mapInit map基本介绍]
* @author Jhou Shuai
* @datetime 2019-06-01T11:11:03+0800
*/
func mapInit() {
// 1.使用map前,先make,make的作用是给map分配数据空间
// 2.Key不能重复,若重复咯。则以最后的一个为准
// 3.value可以重复
// 4.key-value无序的
var student map[int]map[string]string
student = make(map[int]map[string]string, 2)
var info map[string]string
info = make(map[string]string, 10)
info["name"] = "周帅"
info["age"] = "18"
info["age"] = "22"
student[0] = info
fmt.Println(student)
}
/**
* [mapUseMethod map的使用方式]
* @author Jhou Shuai
* @datetime 2019-06-01T11:10:46+0800
*/
func mapUseMethod() {
// 1.第一种使用方式:
var school map[int]map[string]string
school = make(map[int]map[string]string, 2)
// 2.第二种使用方式:
teacher := make(map[string]string)
teacher["No01"] = "张导"
teacher["No02"] = "李师师"
// 3.第三种使用方式:
// var student map[string]string = map[string]string{"No001":"Faker","No002":"Uzi"}
// var student = map[string]string{"No001":"Faker","No002":"Uzi"}
// student := map[string]string{"No001":"Faker","No002":"Uzi"}
student := make(map[string]map[string]string)
student["No001"] = make(map[string]string, 3)
student["No001"]["name"] = "Faker"
student["No001"]["sex"] = "男"
student["No001"]["address"] = "玉林北巷988号"
student["No002"] = make(map[string]string, 3)
student["No002"]["name"] = "Uzi"
student["No002"]["sex"] = "男"
student["No002"]["address"] = "春熙路998号"
school[0] = teacher
// map[0:map[No01:张导 No02:李师师]]
fmt.Println(school)
// map[No001:map[address:玉林北巷988号 name:Faker sex:男] No002:map[address:春熙路998号 name:Uzi sex:男]]
// map[address:春熙路998号 name:Uzi sex:男]
fmt.Println(student["No002"])
}
/**
* [curdMap map的增删改查]
* @author Jhou Shuai
* @datetime 2019-06-01T11:10:33+0800
*/
func curdMap() {
var cities = make(map[string]string)
// 增加
cities["No01"] = "上海"
cities["No02"] = "北京"
cities["No03"] = "成都"
cities["No04"] = "重庆"
fmt.Println(cities)
// 修改
cities["No03"] = "天府之国"
// 删除
// delete 内置函数
// 删除所有,遍历逐一删除
// 直接make 一个新的空间 一次性清空
// cities = make(map[string]string) 一次性清空
delete(cities, "No04")
delete(cities, "No05")
fmt.Println(cities)
// 查找
val, ok := cities["No05"]
if ok {
fmt.Println(val)
} else {
fmt.Println("key值不存在!")
}
}
/**
* [mapForRange map遍历 for-range]
* @author Jhou Shuai
* @datetime 2019-06-01T11:13:16+0800
*/
func mapForRange() {
var cities = make(map[string]string)
cities["No01"] = "上海"
cities["No02"] = "北京"
cities["No03"] = "成都"
cities["No04"] = "重庆"
for key, val := range cities {
fmt.Printf("编号:%v,城市名:%v \n", key, val)
}
fmt.Println("----------华丽的分割线-----------")
student := make(map[string]map[string]string)
student["No001"] = make(map[string]string, 3)
student["No001"]["name"] = "Faker"
student["No001"]["sex"] = "男"
student["No001"]["address"] = "玉林北巷988号"
student["No002"] = make(map[string]string, 3)
student["No002"]["name"] = "Uzi"
student["No002"]["sex"] = "男"
student["No002"]["address"] = "春熙路998号"
kyName := make(map[string]string, 3)
kyName["name"] = "姓名"
kyName["sex"] = "性别"
kyName["address"] = "地址"
fmt.Println("总共有:",len(student),"个学生!信息如下:")
for key, items := range student {
fmt.Printf("学生编号:%v \t", key)
for ky, val := range items {
alias, _ := kyName[ky]
fmt.Printf("%v:%v \t", alias, val)
}
fmt.Println()
}
}
/**
* [mapSlice map切片]
* @author Jhou Shuai
* @datetime 2019-06-01T12:24:43+0800
*/
func mapSlice() {
// var monster []map[string]string = make([]map[string]string,2)
monster := make([]map[string]string,2)
if monster[0] == nil {
monster[0] = make(map[string]string,2)
monster[0]["name"] = "饕餮"
monster[0]["power"] = "10000"
}
if monster[1] == nil {
monster[1] = make(map[string]string,2)
monster[1]["name"] = "地狱犬"
monster[1]["power"] = "20000"
}
// panic: runtime error: index out of range
// 越界咯
// if monster[2] == nil {
// monster[2] = make(map[string]string,2)
// monster[2]["name"] = "凤凰"
// monster[2]["power"] = "30000"
// }
// 通过切片的append函数,可以动态的增加
newMonster := map[string]string{
"name":"青龙",
"power":"100000",
}
monster = append(monster,newMonster)
fmt.Println(monster)
}
/**
* [mapSorted map排序]
* @author Jhou Shuai
* @datetime 2019-06-01T13:01:15+0800
*/
func mapSorted() {
// 1.现将map的key放入到切片中
// 2.对切片进行排序 sort.Ints()
// 3.遍历切片,然后按照key来输出map的值
var intMap map[int]int = make(map[int]int,5)
intMap[1] = 30
intMap[0] = 300
intMap[3] = 20
intMap[4] = 50
intMap[2] = 80
var keys []int
for key,_ := range intMap {
keys = append(keys,key)
}
sort.Ints(keys)
for _,val :=range keys {
fmt.Printf("intMap[%v]=%v \n",val,intMap[val])
}
}
func modify(mapArg map[int]int) {
mapArg[10] = 300
}
/**
* [mapUsedDetail 使用细节]
* @author Jhou Shuai
* @datetime 2019-06-01T13:10:17+0800
*/
func mapUsedDetail() {
// 1.map是引用类型:遵守引用类型传递的机制,在一个函数接收map,
// 修改后,会直接修改原来的map
// 2.map动态扩容,自动扩容,动态的增加key-value。切片slice只能通过append
// 3.map的value经常使用struct类型,更适合管理更复杂的数据
mapArg := make(map[int]int,2)
mapArg[1] = 30
mapArg[2] = 20
mapArg[10] = 100
fmt.Println(mapArg)
modify(mapArg)
fmt.Println(mapArg)
var students map[string]Stu = make(map[string]Stu,2)
stu01 := Stu{"Faker",19,"玉林北巷988号"}
stu02 := Stu{"Uzi",18,"春熙路998号"}
students["No001"] = stu01
students["No002"] = stu02
// 遍历
fmt.Println("总共有:",len(students),"个学生!信息如下:")
for key, items := range students {
fmt.Printf("学生编号:%v\t 姓名:%v\t 年龄:%v\t 地址:%v\t \n",
key,items.Name,items.Age,items.Address)
}
}
func userApplication() {
users := make(map[string]map[string]string,10)
users["Uzi"] = make(map[string]string,2)
users["Uzi"]["nickname"] = "狂小狗"
users["Uzi"]["pwd"] = "123456"
modifyUser(users,"Faker","蜗壳")
modifyUser(users,"Uzi","洗澡啦")
fmt.Println(users)
}
func modifyUser(users map[string]map[string]string, name string,nickname string) {
// 判断users中是否有name
// val,ok := users[name]
if users[name] != nil {
users[name]["pwd"] = "888888"
users[name]["nickname"] = nickname
}else{
users[name] = make(map[string]string,2)
users[name]["nickname"] = nickname
users[name]["pwd"] = "123456"
}
}
转载于:https://www.jianshu.com/p/889b0c0184b9