package main
import (
"encoding/json"
"fmt"
)
/*
key-value
键值存储 map -- dict底层是哈希桶存储
key 天生去重 值类型(整型,字符型,布尔) 引用类型(切片,指针,map)
value 可以重复
哈希算法是一种加密算法,无序 将任意长度的数据(通常称为“消息”)转换为固定长度的输出
单向加密,意味着从原始数据生成哈希值很容易,但从哈希值反推原始数据是非常困难甚至是不可能的。
确定性:对于相同的输入数据,哈希算法总是产生相同的哈希值。
唯一性:不同的输入数据几乎总是产生不同的哈希值。理想情况下,即使是微小的变化也会导致完全不同的哈希值。
不可逆性:很难(如果不是不可能的话)从哈希值反推原始输入数据。
抗碰撞性:找到两个不同的输入数据,使得它们产生相同的哈希值是非常困难的。
数据完整性验证:通过比较文件的哈希值来验证文件是否被篡改。
密码存储:存储经过哈希处理的密码,而不是明文密码。
map 字段 bucket存放指向底层hash桶的指针
var name map[key_type]value_type]
make申明 申请年轻内存空间,用来做slice map channel初始化
name := make(map[key_type]value_type)
*/
//country := make(map[string]string, 100)
//country["China"] = "中国"
//country["USA"] = "美国"
//country["UK"] = "英国"
//println(country["China"])
//fmt.Println(country, country["China"])
//for k, v := range country {
// println(k, v)
//}
//判断key在不在map中
//value, ok := country["China"]
//ok是状态 为true表示能正常取到值
//if ok {
// println(value)
//} else {
// println("key not exist")
//}
//声明复制
//country := map[string]string{
// "China": "中国",
// "USA": "美国",
// "UK": "英国",
//}
//遍历
//for k, v := range country {
// println(k, v)
//}
//delete(country, "UK")
//fmt.Println(country)
/*
{"root": {"password":"123456","age":18,"sex":"男","hobby":["吃饭","睡觉","打豆豆"],"address":{"province":"北京","city":"北京","street":"东城区"}}}
*/
//userinfo := map[string]map[string]string{
// "root": {
// "password": "123456",
// "age": "18",
// "sex": "男",
// },
// "admin": {
// "password": "123456",
// "age": "18",
// "sex": "男",
// },
//}
//fmt.Println(userinfo)
// 学生信息系统添加 无限次数添加查询 返回上一级 按q退出
// 1.添加学生信息 判断此用户名有没有添加过,没有就提示输入学生信息(姓名,年龄,性别,住址)
// 2.查询学生信息 按名字查询 判断输入的名字有没有添加过,有就输出信息,没有就提示没有添加过
// json map转换成json 字符串json转map 信息固化
func main() {
stuinfo := map[string]map[string]string{
"huang": {
"age": "18",
"sex": "女",
"address": "长沙",
},
"zhang": {
"age": "19",
"sex": "男",
"address": "武汉",
},
"li": {
"age": "21",
"sex": "女",
"address": "上海",
},
"wang": {
"age": "20",
"sex": "男",
"address": "广州",
},
"zhou": {
"age": "22",
"sex": "男",
"address": "深圳",
},
}
for {
fmt.Println("1:添加学生信息 2:查询学生信息 q:退出系统")
var choice string
fmt.Scanln(&choice)
switch choice {
case "1":
fmt.Println("开始添加学生信息")
var name, age, sex, address string
fmt.Print("请输入学生姓名 年龄 性别 住址: ")
_, _ = fmt.Scanln(&name, &age, &sex, &address)
if _, exists := stuinfo[name]; exists {
fmt.Println("该学生已存在,请勿重复添加")
} else {
// 添加学生信息,而不是整个 newStudent 字典
stuinfo[name] = map[string]string{
"age": age,
"sex": sex,
"address": address,
}
fmt.Println("添加成功")
}
fmt.Println(stuinfo)
case "2":
fmt.Println("开始查询学生信息,请输入要查询的学生姓名")
var name string
fmt.Scanln(&name)
value, ok := stuinfo[name]
if ok {
fmt.Println(value)
} else {
fmt.Println("该学生不存在,请先添加")
}
case "q":
fmt.Println("退出系统")
return
}
}
}
func toJSON(stuinfo map[string]string) ([]byte, error) {
jsonBytes, err := json.Marshal(stuinfo)
if err != nil {
return nil, err
}
return jsonBytes, nil
}
func fromJSON(jsonString string) (map[string]*string, error) {
var stuinfo map[string]*string
err := json.Unmarshal([]byte(jsonString), &stuinfo)
if err != nil {
return nil, err
}
return stuinfo, nil
}
go开发 map
最新推荐文章于 2024-10-31 16:13:16 发布