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.pswp.cn/news/534151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534151.shtml
英文地址,請注明出處:http://en.pswp.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/…