Go语言程序设计(六)字典(映射)

这篇具有很好参考价值的文章主要介绍了Go语言程序设计(六)字典(映射)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概念

        在Go语言中,Map是一种特殊的数据结构,它由一对无序的数据项组成,被称为键值对(Key-value Pair)。其中的一项是键(Key),另外一项是值(Value), Map通过把键映射到值来进行访问,这种方式可以加快数据查找的速度。所以,Map通常也被称作字典(Dictionary)或哈希表(Hash table) ,本文统一称为“字典"。

二、字典的声明

        字典也是一种引用数据类型,在声明字典时,除了要定义字典名,还要指定“键”类型和“值”类型,“键”类型要使用一对方括号“[ ]”括起来。字典一般声明格式如下:

var mapName map[keyType]valueType

说明:

  • (1)字典名的命名规则和变量名相同,遵循标识符命名规则。
  • (2)不要给字典指定长度,字典的长度会在初始化或创建过程中动态增长。
  • (3) Key必须是支持比较运算(==、!=)的数据类型,比如整型、浮点型、指针、数组、结构体、接口等,而不能是函数、字典、切片这几种类型。
  • (4)Value类型可以是Go语言的任何基本数据类型。

三、字典的初始化和创建

        字典声明好后必须经过初始化或创建才能使用,未初始化或创建的字典值为nil。可以使用“{}”操作符对字典进行初始化,或使用make()函数来创建字典。初始化或创建后,就可以使用“=”操作符向字典动态增添数据项了。
        例如,下面的操作语句编译时会出错:

var map1 map[ string ]int
map1["key1"]= 1

        出错的原因是虽然声明了字典map1,但mapl没有被初始化,所以系统并没有给它分配存储空间,也就不能向mapl中添加数据项了。
        下面的操作语句是正确的:

var map1 map[string]int {}
map1["key1"]= 1

        上面的操作语句正确,因为在声明字典map1的同时使用“{}”操作符对字典进行了初始化,也就意味着系统给map1分配了存储空间,当然就可以使用“=”操作符向mapl添加数据项了。
        下面的操作也是可行的:

var map1 map[ string ] int
map1 = make(map[string]int)
map1["key1"]= 1

        这里首先声明字典map1,然后使用make()函数来创建map1,make函数操作的实质就是给map1分配存储空间,所以make后也可以使用“=”操作符向map1添加数据项。

四、字典的访问和操作

字典是通过Key来访问Value的,访问格式如下:

Value = mapName[Key]

        字典使用键值的访问形式和数组使用下标的访问形式有些类似,其实数组可以看作是一个键值类型为整型的字典。访问以后就可以对字典中的键值对进行查找或删除操作了。

1、字典项查找

        在Go语言中,要从字典中查找一个特定的键值对,可以通过下面语句来实现:

v,OK := mapName[Key]

        这条语句执行后,如果查找的Key值存在,则将Key对应的Value值赋予v,OK为true,反之,如果Key不存在,则v等于0,OK为false。

2、字典项删除

        内置函数delete(),用于删除容器内的元素。

delete(map1, "key1")

        上面语句表示从map1中删除键值为“key1”的键值对,如果这个健不存在,那么什么也不会发生,也不会产生什么副作用。但是如果传入的Map变量值是nil,该调用将会导致程序出现异常。文章来源地址https://www.toymoban.com/news/detail-525880.html

到了这里,关于Go语言程序设计(六)字典(映射)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang TCP/IP服务器/客户端应用程序,设计一个简单可靠帧传送通信协议。(并且正确处理基于流式控制协议,带来的应用层沾帧[沾包]问题)

    在 Golang 语言标准库之中提供了,对于TCP/IP链接、侦听器的高级封装支持,这易于上层开发人员轻松基于这些BCL(基础类库)实现期望的功能。 TCP/IP链接(客户端) net.Conn 接口 TCP/IP侦听器(服务器) net.Listener Golang 提供了易用的写入数据到远程(对端)实现,而不比像 C/C

    2024年01月24日
    浏览(64)
  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(59)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?

    Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 先看一段代码示例: 当我们多执行几次这段代码时,就会发现,输出的顺序是不同的。 首先,Go 语言

    2024年02月14日
    浏览(69)
  • 【Golang】Golang进阶系列教程--Go 语言数组和切片的区别

    在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 数组和切片是两个常用的数据结构。它们都可以用于存储一组相同类型的元素,但在底层实现和使用方式上存在一些重要的区别。 Go 中数组的长度是不可改变的

    2024年02月15日
    浏览(61)
  • 【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

    在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义如下: 指针: 指向

    2024年02月14日
    浏览(70)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(60)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(93)
  • 【Golang】VScode配置Go语言环境

    安装VScode请参考我的上一篇博客:VScode安装_㫪548的博客-CSDN博客 接下来我们直接进入正题: Go语言(又称Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言具有简洁、高效、可靠和易于阅读的特点,被设计用于解决大型项目的开发需求。它结合了静态类型

    2024年02月03日
    浏览(66)
  • 【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

    在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用来指定 struct 中每个字段的元信息。 在本文中,我们将探讨为什

    2024年02月15日
    浏览(80)
  • Golang(Go语言)IP地址转换函数

    String形式的IP地址和Int类型互转函数 代码 输出如下:  

    2024年02月05日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包