Go映射的使用

 更新时间:2023年11月20日 11:36:00   作者:hope_wisdom  
Go提供了另一个重要的数据类型,称为map,它将唯一键映射到值,本文主要介绍了Go映射的使用,包括声明映射、初始化映射、操作映射等,感兴趣的可以了解一下

概述

上一节的内容中,我们介绍了Go的结构体,包括:定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中,我们将介绍Go的映射。Go语言中的映射(Map)是一种无序的键值对集合,使用关键字map来声明,并使用键和值类型作为参数。它是一个用于存储一系列无序的键值对的集合,基于键来存储值,键就像索引一样,指向与该键关联的值。

映射被创建和初始化后,可以通过指定适当类型的键并给这个键赋一个值来为映射赋值,每个键必须是唯一的。另外,映射是可变的,可以在已有的键值对基础上添加新的键值对。Go语言中映射的实现使用哈希表,因此它的操作是非常快速的。然而,由于映射是无序的,即使使用同样的顺序保存键值对,每次迭代映射的时候,顺序也有可能不一样。

声明映射

在Go语言中,映射的声明使用map关键字,并指定键和值的类型。以下是声明映射的语法:

var m map[keyType]valueType

其中,keyType表示键的类型,valueType表示值的类型。比如:要声明一个将字符串作为键、整数作为值的映射,可以参考下面的示例代码。

var m map[string]int

初始化映射

声明映射时,可以直接添加初始键值对,可参考下面的示例代码。

package main

import "fmt"

func main() {
    mapWebsite := map[string]int{
        "CSDN":  66,
        "GitHub": 88,
    }

    // 输出:map[CSDN:66 GitHub:88]
    fmt.Println(mapWebsite)
}

当然,也可以使用make函数来初始化映射。在下面的示例代码中,我们通过make函数创建了一个空的映射,可以在后续的代码中通过使用赋值操作来添加键值对。

package main

import "fmt"

func main() {
    mapWebsite := make(map[string]int)
    // 输出:map[]
    fmt.Println(mapWebsite)
}

注意:映射是引用类型,使用make函数分配的是一个引用,后续对映射的修改会影响到原始的映射对象。

操作映射

声明映射后,我们可以向映射中添加新的键值对,也可以访问和修改映射中的值。具体用法可参考下面的示例代码。

package main

import "fmt"

func main() {
    mapWebsite := make(map[string]int)
    // 添加新的键值对
    mapWebsite["CSDN"] = 66
    mapWebsite["GitHub"] = 88
    // 输出:map[CSDN:66 GitHub:88]
    fmt.Println(mapWebsite)

    // 访问键对应的值,输出:88
    fmt.Println(mapWebsite["GitHub"])

    mapWebsite["CSDN"] = 99
    // 修改键对应的值,输出:99
    fmt.Println(mapWebsite["CSDN"])
}

另外,我们可以使用len()函数获取映射的长度,使用delete()函数删除某个键值对。

package main

import "fmt"

func main() {
    mapWebsite := map[string]int{
        "CSDN":  66,
        "GitHub": 88,
    }

    // 输出:2
    fmt.Println(len(mapWebsite))
    delete(mapWebsite, "GitHub")
    // 输出:1
    fmt.Println(len(mapWebsite))
}

可以使用如下方式检查键是否存在于映射中:value, ok := mapName[key]。其中,mapName是映射的变量名,key是要检查的键。如果key存在于mapName中,那么value将是对应的值,并且ok将置为true;否则,value将是零值,并且ok将置为false。

package main

import "fmt"

func main() {
    mapWebsite := map[string]int{
        "CSDN":  66,
        "GitHub": 88,
    }

    value, ok := mapWebsite["CSDN"]
    if ok {
        // 输出:existed: 66
        fmt.Printf("existed: %d\n", value)
    } else {
        fmt.Println("not exist")
    }
}

要遍历map,我们可以使用range关键字。当遍历map时,range会返回两个值:键和对应的值。具体用法可参考下面的示例代码。

package main

import "fmt"

func main() {
    mapFruit := make(map[string]int)
    mapFruit["Apple"] = 66
    mapFruit["Banana"] = 88
    mapFruit["Orange"] = 99

    /* 遍历map,输出:
        Apple 66
        Banana 88
        Orange 99
    */
    for key, value := range mapFruit {
        fmt.Println(key, value)
    }
}

 到此这篇关于Go映射的使用的文章就介绍到这了,更多相关Go映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang 字符串拼接性能的对比分析

    golang 字符串拼接性能的对比分析

    这篇文章主要介绍了golang 字符串拼接性能的对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 一文彻底理解Golang闭包实现原理

    一文彻底理解Golang闭包实现原理

    闭包对于一个长期写Java的开发者来说估计鲜有耳闻,光这名字感觉就有点"神秘莫测"。这篇文章的主要目的就是从编译器的角度来分析闭包,彻底搞懂闭包的实现原理,需要的可以参考一下
    2022-10-10
  • Go语言七篇入门教程七GC垃圾回收三色标记

    Go语言七篇入门教程七GC垃圾回收三色标记

    这篇文章主要为大家介绍了Go语言教程关于GC垃圾回收三色标记的示例详解,本篇文章是Go语言七篇入门教程系列文章,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Go语言里的new函数用法分析

    Go语言里的new函数用法分析

    这篇文章主要介绍了Go语言里的new函数用法,实例分析了new函数的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Go语言使用钉钉机器人推送消息的实现示例

    Go语言使用钉钉机器人推送消息的实现示例

    本文主要介绍了Go语言使用钉钉机器人推送消息的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 详解Go语言中的作用域和变量隐藏

    详解Go语言中的作用域和变量隐藏

    这篇文章主要为大家介绍了Go语言中的作用域和变量隐藏,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-04-04
  • GO CountMinSketch计数器(布隆过滤器思想的近似计数器)

    GO CountMinSketch计数器(布隆过滤器思想的近似计数器)

    这篇文章主要介绍了GO CountMinSketch计数器(布隆过滤器思想的近似计数器),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • go web 处理表单的输入的说明

    go web 处理表单的输入的说明

    今天给大家普及go表单输入方面的知识点,整体代码分为前端页面和后端处理方法,通过代码给大家介绍的很详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-06-06
  • go语言实现二叉树的序例化与反序列化

    go语言实现二叉树的序例化与反序列化

    这篇文章主要介绍了go语言实现二叉树的序例化与反序列化,文章围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • golang判断chan channel是否关闭的方法

    golang判断chan channel是否关闭的方法

    这篇文章主要介绍了golang判断chan channel是否关闭的方法,结合实例形式对比分析了Go语言判断chan没有关闭的后果及关闭的方法,需要的朋友可以参考下
    2016-07-07

最新评论