1. 程式人生 > >golang語言中map的初始化及使用

golang語言中map的初始化及使用

// 先宣告map
var m1 map[string]string
// 再使用make函式建立一個非nil的map,nil map不能賦值
m1 = make(map[string]string)
// 最後給已宣告的map賦值
m1["a"] = "aa"
m1["b"] = "bb"

// 直接建立
m2 := make(map[string]string)
// 然後賦值
m2["a"] = "aa"
m2["b"] = "bb"

// 初始化 + 賦值一體化
m3 := map[string]string{
    "a": "aa",
    "b": "bb",
}

// ==========================================
// 查詢鍵值是否存在 if v, ok := m1["a"]; ok { fmt.Println(v) } else { fmt.Println("Key Not Found") } // 遍歷map for k, v := range m1 { fmt.Println(k, v) }

補充:

  1. map資料型別初始化:

    兩種方式:map[string]string{}或make(map[string]string)

  2. 未初始化的map是nil:

    未初始化的map是nil,它與一個空map基本等價,只是nil的map不允許往裡面新增值。(A nil map is equivalent to an empty map except that no elements may be added)
    因此,map是nil時,取值是不會報錯的(取不到而已),但增加值會報錯。
    其實,還有一個區別,delete一個nil map會panic,但是delete 空map是一個空操作(並不會panic)(這個區別在最新的Go tips中已經沒有了,即:delete一個nil map也不會panic)

  3. 通過fmt列印map時,空map和nil map結果是一樣的:

    通過fmt列印map時,空map和nil map結果是一樣的,都為map[]。所以,這個時候別斷定map是空還是nil,而應該通過map == nil來判斷。
    Request中的Form欄位就是如此,在沒有直接或間接呼叫ParseForm()時,Form其實是nil,但是,你如果println出來,卻是map[],可能有些困惑。通過跟蹤原始碼可以發現,Form根本沒有初始化。而在FormValue()方法中會判斷Form是否為nil,然後決定是否呼叫ParseForm()方法,當然,你也可以手動呼叫ParseForm()方法。

相關推薦

golang言中map初始使用

// 先宣告map var m1 map[string]string // 再使用make函式建立一個非nil的map,nil map不能賦值 m1 = make(map[string]string) // 最後給已宣告的map賦值 m1["a"] = "aa"

golang言中map初始使用:程式碼示例

程式碼示例 // 先宣告map var m1 map[string]string // 再使用make函式建立一個非nil的map,nil map不能賦值 m1 = make(map[string]string) // 最後給已宣告的map賦值 m1["a"] = "aa"

R言中的scale函式標準化和歸一的理解

在不同組資料間存在差異時,經常要進行標準化或者歸一化處理,標準化,歸一化及scale的具體理解見https://blog.csdn.net/tanzuozhev/article/details/50602051,待我日後

CentOS7系統環境初始安裝的時候網卡改名為eth*

ati cfg iyu ios tcpdump log sysconfig emctl 更新 操作系統安裝: 將網卡名稱設置為eth*,不使用CentOS 7默認的網卡命名規則。所以需要在安裝的時候,增加內核參數。1. 光標選擇“Install CentOS 7”

Servlet初始處理HTTP請求

png cal 共享 servlet配置 用戶訪問 input 端口號 doget 本地 上一篇詳細介紹了與Servlet相關的幾個核心的接口和類,當我們自己寫Servlet類時,一般需要繼承HttpServlet類,實現init()、doGet()、doP

Web開發中Listener、Filter、Servlet的初始調用

children tomcat啟動 什麽 lis exceptio try 部分 OS findchild 我們在使用Spring+SpringMVC開發項目中,web.xml中一般的配置如下: 1 <?xml version="1.0" encoding=

結構體初始定義1

HA int tdi %d struct 初始 student har nbsp #include<stdio.h> struct student{ int num; char name[20]; float score; }; int m

JAVA中初始默認值,包裝類與基本類型

屬於 java val 初始化 成員 als integer 基本數據 lean 當變量作為作為類成員使用時,java才確保給定其初始值,防止程序運行時錯誤 數據類型初始值 byte 0 short 0 int 0 long 0L char ‘u000

Git初始倉庫創建和操作

用戶 lis 分享 demo 創建文件 git命令 文件夾 alt 設置 步驟一:創建git初始化工作空間,在對應的工作空間,打開git命令行模式 步驟二:1)、設置用戶名:git config -- global user.name ‘github上註冊的用戶名‘

30、mysql初始客戶端工具的使用

mysql監聽的埠: 3306/tcp 檢視埠 ss -tnl 檢視命令歷史 ~/.mysql_history Mysql初始化:提供配置檔案(/etc/mysql/my.cnf  /etc/my.cnf  ~/.my.cnf) 集中式的配置:多個應用程式共用的配置檔案

NSQ原始碼分析(一)——nsqd的初始啟動流程

nsq原始碼地址:https://github.com/nsqio/nsq 版本1.1.0  NSQ原始碼分析系列是我通過閱讀nsq的原始碼及結合網上的相關文章整理而成,由於在網上沒有找到很詳細和完整的文章,故自己親自整理了一份。如果有錯誤的地方,還請指正,希望這系列的文章給您帶來

node——1-node 的初始 檔案讀寫

node 初始化(helloworld) 新建 helloworld.js 檔案,內容如下: var foo = 'hello world!'; console.log(foo); // 在 node 中,採用 EcmaScript 進行編碼 // 沒有 BOM、DOM,和瀏覽

mysql5.7.24免安裝版配置密碼初始mysql-font連線異常

1、解壓檔案,例如:置於E:\Program Files\mysql-5.7.24-winx64,新建my.ini ,內容如下: [mysqld] # 設定為自己MYSQL的安裝目錄 basedir=E:\Program Files\mysql-5.7.24-winx64 # 設定為MYSQL的資

Node 中 Buffer 的初始回收

node中的buffer相信大家都不會陌生,畢竟這個東西是node的核心之一,我們讀寫檔案,網路請求都會用到它。不過,之前我雖然一直在用這個東西,卻沒關心過他的實現,只知道通過buffer分配的記憶體佔用的不是v8的heap上的記憶體,存在於newSpace和oldSpace之外,所以可以用它來進行一些大段記

think in java--7.10初始類載入的理解

1.在java中每個類都會編譯成一個獨立得檔案。該檔案只會在程式需要使用的時候才載入。可以說:類得程式碼在初次使用的時候才會載入。還有,當訪問static域或者方法時候,也會發生載入。初次使用之處也是static載入發生之處,所有的static物件和static方法都會在載入時按照程式順序載入,定義

Java靜態變數初始建構函式的執行順序與執行時機分析

    對於Java初學者來說,關於靜態變數、非靜態變數的初始化時機與順序,以及建構函式的執行時機與順序都會感覺有點理不清頭緒,下面文章使用例項程式幫大家解決這方面的疑惑。雖然簡單,但是對Java入門者來說還是有一定的幫助作用。    

Java 類成員變數自動初始對應的初始

1、Java在類初始化的時候會自動為類成員變數賦值,不需要自己必須手動賦值,當然也可以通過初始化方法手動賦值。 2、Java資料型別初始化對照表: 資料型別 初始值 boolean false cha

JAVA基礎(19)---陣列的定義、初始遍歷

陣列 陣列的定義:將同種型別的資料,有組織的存放與一定的記憶體空間中。 陣列的定義格式:           常用的格式:                                ①資料型別[]  陣列名稱 = new 資料型別[定義陣列的大小];      

Spring中Bean的初始銷燬方式

Spring中Bean的兩種初始化方式 是什麼 為什麼 但是,如果必須要用多例Bean怎麼辦? 以下為Spring中的多例及初始化 再來說說初始化的一些不同細節 問題: 對Bean的銷

vue-cli專案的初始常見‘怪’問題

/*命令用綠色標註*/ /*加程式碼用 ++ 表示,減程式碼用 --表示,更改程式碼用 +-表示*/ 1.專案初始化 1.$ vue init webpack [專案名稱--可省略,預設在當前資料夾下建立(檔名最好純小寫,當前檔案目錄最好也是)] 2.按回車並填入