当前位置:首页 > 数据库

一篇文章带你了解Go语言基础之Map

 回忆往事

在上述的篇文多个文章中,我们学习了数据类型,章带数组,语言基切片等帮助我们存储数据。篇文

尤其是章带是切片,可以存储多个东西,语言基并且可以灵活的篇文增删改查。

但是章带切片仍然有不太方便的地方。

比如学生,语言基一个学生的篇文信息是多个的,例如姓名,章带身高,语言基体重,篇文年龄等。章带

如果使用切片,语言基我们可能是这样存储的。

package main import "fmt" func main() {      //学生1     var stu1 = []string{ "张三", "188", "70KG", "18"}     //学生2     var stu2 = []string{ "李四", "170", "66KG", "17"}     fmt.Println(stu1)     fmt.Println(stu2) } 

如果按照目前所接受的服务器托管知识,只能到这了,我也只能想到这。

但是会有一个明显的缺点,就是我们需要通过下标取值或者修改值。

并且我们还得数一下想修改的值的下标在哪个位置,相对来说,不是那么方便。

引入map

map,在Python中叫字典,Java中也叫map,PHP中好像列表就带有map的功能。

map是键值对(key-value)存储结构,是无序的,内部使用哈希(hash)实现,性能很高。

在Go中,map是引用类型,内存图如下。

map基本使用

map语法

方式一,声明时赋值 var 变量名 = map[key类型][value类型]{      key:value,     key:value,网站模板//必须使用,结尾,否则会报错 } //方式二,make方式 var 变量名 = make(map[key类型]value类型, 容量(cap)) //如果map是make方式声明的,第二个参数直接就是容量,元素个数是0,没有第三个参数 

示例

方式一,声明时赋值

代码

package main import "fmt" func main() {      var stu1 = map[string]string{          "Name":   "张三",         "Age":    "18",         "height": "188", //每行都要以,结尾, }     var stu2 = map[string]string{          "Name":   "李四",         "Age":    "20",         "height": "170", //每行都要以,结尾, }     fmt.Println(stu1, stu2)      //map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170] } 

方式二,make方式

代码

package main import "fmt" func main() {      var stu1 = make(map[string]string,10)     stu1["Name"] = "张三"     stu1["Age"] = "18"     stu1["height"] = "188"     var stu2 = make(map[string]string,10)     stu2["Name"] = "李四"     stu2["Age"] = "20"     stu2["height"] = "170"     fmt.Println(stu1,stu2)     //map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170] } 

ps:关于这两种方式,哪个使用的多。

我的建议是,服务器租用如果确定有多少个字段,就使用第一种,如果不确定多少个字段,是动态添加的,用第二种。

使用第二种要大概估算好容量,超过会触发自动扩容机制,可能会产生那么一丝丝的性能影响。

遍历map(查)

遍历map,通常只用一种方式for range。

代码

package main import "fmt" func main() {      var stu1 = make(map[string]string, 10)     stu1["Name"] = "张三"     stu1["Age"] = "18"     stu1["height"] = "188"     for key, value := range stu1 {          //map遍历时,key值键,value是值         fmt.Println(key, value)   } } 

只遍历key

package main import "fmt" func main() {      var stu1 = make(map[string]string, 10)     stu1["Name"] = "张三"     stu1["Age"] = "18"     stu1["height"] = "188"     for key := range stu1 {          //只遍历key         fmt.Println(key)   } } 

修改map的值(改)

package main import "fmt" func main() {      //var stu1 = make(map[string]string, 10)     //stu1["Name"] = "张三"     //stu1["Age"] = "18"     //stu1["height"] = "188"     //     //stu1["Name"] = "张三666"//修改     //fmt.Println(stu1)     //同上     var stu1 = map[string]string{          "Name":   "张三",         "Age":    "18",         "height": "188", //每行都要以,结尾, }     stu1["Name"] = "张三666"//修改     fmt.Println(stu1) } 

删除map里面的值

删除map里面的值需要用到delete。

代码

package main import "fmt" func main() {      var stu1 = map[string]string{          "Name":   "张三",         "Age":    "18",         "height": "188", //每行都要以,结尾, }     fmt.Println(stu1)    //map[Age:18 Name:张三 height:188]     delete(stu1, "Name") //删除key以及key对应的值     fmt.Println(stu1)    //map[Age:18 height:188] } 

map取值注意事项

map在取值时,尽可能的判断一下是否key存在

package main import "fmt" func main() {    var stu1 = map[string]string{      "Name":   "张三",     "Age":    "18",     "height": "188", //每行都要以,结尾,   }   //result := stu1["Name"]//key存在,没问题   //fmt.Println(result)//张三   //result := stu1["Names"]//手一抖,key打错了   //fmt.Println(result)//结果为空,显然不是太友好   //取值标准用法   result, ok := stu1["Name"]   //如果key存在,ok为true,如果key不存在,ok为false   fmt.Println(result,ok)//张三 true   if ok {      fmt.Println(result)   } else {      fmt.Println("key不存在")   } } 

总结

上述我们学习了Go基础之map。如果在操作过程中有任何问题,记得下面讨论区留言,我们看到会第一时间解决问题。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈,感谢你的观看。

本文转载自微信公众号「 Go语言进阶学习」,可以通过以下二维码关注。转载本文请联系 Go语言进阶学习公众号。

分享到:

滇ICP备2023006006号-16