c++ map初始化_Go学习每日一问(18)-map元素查找

每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下go中的一个知识点:map元素查找

日省吾身

1.下面代码中 A B 两处应该怎么修改才能顺利编译?

func main() {    var m map[string]int        //A    m["a"] = 1    if v := m["b"]; v != nil {  //B        fmt.Println(v)    }}

2.写出下面代码片段的输出结果?

func main() {s := [3]string{"a", "b", "c"}s1 := s[:0]s2 := s[:2]s3 := s[1:2:cap(s)]fmt.Println("s1:", len(s1), cap(s1))fmt.Println("s2:", len(s2), cap(s2))fmt.Println("s3:", len(s3), cap(s3))}

思考后看下方答案…

fd3ad696d6127ff0302b1c2d80145a39.png

答疑解惑

参考答案:

1. 原程序编译报错,改进后的程序示例如下:

func main() {    // var m map[string]int        //A    m := make(map[string]int)      //A改进    m["a"] = 1    // if v := m["b"]; v != nil {  //B    if v, ok := m["b"]; ok {       //B改进        fmt.Println(v)    }

知识点:map

  • 在 A 处,只进行了map的声明,没有分配内存空间,即没有初始化,当前 m 是一个 nil map,不能直接赋值;go中推荐使用内置函数make()或字面量的方式进行map的初始化;
  • 在 B 处,从map中查找一个特定的值,推荐使用改进后的写法; 判断是否找到了特定的值,不需要检查取到的值是否为nil,只需查看第二个返回值ok;它是一个bool型,返回true表示找到了对应的数据;配合 := 操作符,减少代码冗余,看起来清晰易懂;

2. 程序的输出结果为:

s1: 0 3s2: 2 3s3: 1 2

知识点: 切片的创建

  • 基于数组切片,可以使用操作符创建新的切片,形如s[n:l:c],n是偏移的起始位置,l是偏移的长度结束,c是偏移的容量结束位置;l-n 就是新切片的长度, c-n 就是新切片的容量;如果n省略,默认为0
  • 有意思的是,n、l和c并不是当前切片的索引,所以l是可以超出当前切片的长度的,但不能超出当前切片的容量;比如假设oldSlice只有5个元素,但容量是10;newSlice却可以基于oldSlice的前7个元素创建,newSlice中超出oldSlice的部分都会填上0;

以上,你做对了吗?

其他相关答案或补充知识点,欢迎在评论区留言补充!

下期提问

  1. 判断下面代码片段的输出结果?
func incrementA() int {var n intdefer func() {n++}()return n}func incrementB() (m int) {defer func() {m++}()return m}func main() {fmt.Println(incrementA())fmt.Println(incrementB())}
  • A. 0 0
  • B. 0 1
  • C. 1 0
  • D. 1 1

答案及解析将在下期文章中给出,欢迎大家在评论区写出你的答案;独乐乐不如众乐乐,欢迎交流学习,互相进步


欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结

jTemplates部分语法介绍1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*816} good {#else} fail {# ...解密jQuery内核 DOM操作方法(二)html,text,val回顾下几组DOM插入有关的方法 innerHTML 设置或获取位于对象起始和结束标签…

-bash: wget: 未找到命令_18个堪称神器的命令行工具,高效运维必备

上期入口:24个 CSS 高级技巧合集提示:因公众号不支持超链接,上图所有项目地址,可在公众号后台回复关键字 “命令行工具” 获取。thefuck命令行打错了以后,打一个fuck就会自动纠正。GitHub:https://github.c…

linux编辑java文本,linux下的文本编辑器VI的使用命令

1、 移动光标H        #移到屏幕的左上角M         #移到屏幕的中间行开头L          #移到屏幕的最后一行[         #移到文件开始位置 (双击)]         #移到文件结束位置(双击):n         #移到文件的第n行Ctrl b     …

python3.8.0安装_Python3.8.0

Python3.8.0是一款广受程序员欢迎的编程语言,也是面向对象的一款设计语言,Python以其语言的灵活和简易性,具有非常简捷而清晰的语法特点,在脚本工具、数据分析、web后端等等领域都有着优良的表现,收到了大家的广泛应用…

linux系统proc目录,快速了解Linux系统下的proc目录

/proc/devices文件这个文件列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。常用的命令为#cat /proc/devices(在调试驱动的时候这个还是有用的,可以通过lsmod查看驱动模块是否加载)/proc/interrupts这个文件的每一行都有一个保留的中断。每…

cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】轮廓面积与长度

本文首发于“小白学视觉”微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解…

linux 脚本批量删除,Linux Shell使用Bash脚本批量删除文件

PHP每天生成一个存有系统要删除的临时文件的.out文件列表,由bash脚本逐行通过读取.out文件(每一行代表一个待删除的文件)挨个删除,代码如下(dl.sh): #!/bin/bash # Shell script utility to delete file. # You can call script as follows, …

python自定义安装哪些不需要_【1】python模块:自定义模块的3种导入方式

一、定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块。如果不懂可以先看下面这篇博文&#xf…

linux mysql数据库日志关闭,linux 怎样恢復mysql数据库日志

1、用dump命令备份数据库。# mysqldump -u root -p dbfile > dbfile.sql2、用rsync从新服务器获得备份的文件(SCP或WGET也可以)。# rsync -avr rootmyolddbserver:/home/mydumpfolder/dbfile.sql3、登陆新服务器的mysql客户端。# mysql -u root -p4. 建立数据库。mysql> …

linux划分root_vg,為Linux添加新硬盤,划分LVM分區

1、為VM添加兩塊SCSI硬盤→→完成后重啟VM→→運行fdisk -l,可以看到系統自動將添加的硬盤識別為/dev/sdb和dev/sdc.2、分區對sdb和sdc進行分區,並調整分區類型為8e(LVM類型),sdb划分為sdb1,sdb2,sdc划分為sdc1,sdc2,sdc3[rootpromote ~]# fdisk /dev/sd…

python文件输入符_python读入文件时加r的作用?

r’xxx’ 的含义 **加 r 会把字符串转变为非转义的原始字符串。**比较常用。 例如:print(D:\\test\\test.txt)print(rD:\\test\\test.txt)print(rD:\test\test.txt)123 结果是:D:\test\test.txt D:\\test\\test.txt D:\test\test.txt123 从结果看来&…

linux kvm切换器,KVM切换器是什么,看懂这一篇就够

原标题:KVM切换器是什么,看懂这一篇就够在服务器机房的机架不便于存放多个显示器和键盘的空间里,KVM切换器起着重要的作用。KVM切换器能从本地或远程监视与控制多个计算机与服务器,由键盘、鼠标和显示屏组成的KVM控制台是最方便和…

alien指令 linux,使用alien命令让deb包和rpm包互相转换

OS version: CentOS7 / Debian9发现alien这个命令时很惊喜,之前在debian上安装etcd找不到安装包感觉很不科学,有了alien命令事情一下就变简单了。这里以etcd为例,将etcd从rpm包转换成deb包,然后传送到debian机器上安装。(这个命令…

linux 信号_Linux信号量(1)-SYSTEM V

​信号量概念信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为…

kali linux 截图位置,Kali Linux中使用shutter截图工具 | CN-SEC 中文网

摘要在Kali 2017以前的版本中默认有一款截图工具--screenshot,升级到2017版后找不到了,下面介绍一款同样好用的截图工具---shutter在Kali 2017以前的版本中默认有一款截图工具--screenshot,升级到2017版后找不到了,下面介绍一款同…

python画图库哪个好_机器学习基础5--python画图库matplotlib(上)

图像是我们最直观的数据表达方式,python的matplotlib库可以用来画图。下面来简单总结下matplotlib的使用方法。上篇讲matplot画图中用到的基础对象,包括图像Figure,平面曲线Line2D,坐标轴Axes,图例Legend, 注解Annotat…

64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接

本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld)。以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s):.section .dataoutput:.asciz "The processor Vendor ID is %s\n".section…

python怎么加图片_python中如何保存图片

一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1、不开源,价格贵 2、软件容量大。一般3G以上,高版本甚至达5G以上。 3、只能做研究,不易转化成软件。python学习网,大…

linux用rsync实现同步,Linux下使用rsync实现主备机代码同步

rsync 分为客户端和服务端软件版本:rsync-2.6.9软件下载地址:http://rsync.samba.org/ftp/rsync/服务端安装过程1.tar -xzvf rsync-2.6.9.tar.gz #解压缩安装文件2.cd rsync-2.6.93. ./configure --prefix/usr/local/rsync #配置安装目录为/usr/local/…