【Golang】Go語言Map數據類型

Go語言Map數據類型

文章目錄

  • Go語言Map數據類型
    • 一、Map
      • 1.1.1、map定義
      • 1.1.2、map的基本使用
      • 1.1.3、判斷某個鍵是否存在
      • 1.1.4、map的遍歷
      • 1.1.5、使用delete()函數刪除鍵值對
      • 1.1.6、按照指定順序遍歷map
      • 1.1.7、元素為map類型的切片
      • 1.1.8、值為切片類型的map

一、Map

  • map是一種無序的基本key-value的數據結構,Go語言中的map是引用類型,必須初始化才能使用。

1.1.1、map定義

  • Go語言中map的定義語法如下
map[keytype]valuetype
  • 其中
keytype: 表示鍵的類型
valuetype: 表示值的類型
  • map類型的變量默認初始值為nil,需要使用make()來分配內存。
  • 語法如下
make(map[keytype]valuetype, [cap])
  • 其中cap表示map的容量,該參數雖然不是必須的,但是我們應該在初始化map的時候就為其執行一個合適的容量。

1.1.2、map的基本使用

  • map中的數據都是成對出現的,map的基本使用示例代碼如下:
func main() {scoreMap := make(map[string]int, 8)scoreMap["張三"] = 90scoreMap["小明"] = 100fmt.Println(scoreMap)fmt.Println(scoreMap["小明"])fmt.Printf("tyoe of a:%T\n", scoreMap)}
  • 結果如下
map[小明:100 張三:90]
100
tyoe of a:map[string]int
  • map也支持在聲明的時候填充元素,例如
func main() {userInfo := map[string]string{"username": "admin","password": "admin@123",}fmt.Println(userInfo)  // map[password:admin@123 username:admin]fmt.Println(userInfo["username"])  // admin fmt.Println(userInfo["password"])  // admin@123}

1.1.3、判斷某個鍵是否存在

  • Go語言中有個判斷map中鍵是否存在的特俗寫法,格式如下:
# value: 將會獲得這個map的值
# ok: 如果key存在那么ok的值就是true否者為false
value, ok := map[key]
  • 舉個例子:
func main() {userInfo := map[string]string{"username": "admin","password": "admin@123",}// 如果key存在ok為true, v為對應key的值; 不存在ok為false, v為值類型的零值v, ok := userInfo["username"]if ok {fmt.Println(v)} else {fmt.Println("查無此人")}}

1.1.4、map的遍歷

  • Go語言中使用for range遍歷map
func main() {scoremap := make(map[string]int)scoremap["張三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60for k, v := range scoremap {fmt.Printf("key: %s value: %d\n", k, v)}}
  • 但我們只想遍歷key的時候,可以按照下面的寫法:
func main() {scoremap := make(map[string]int)scoremap["張三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60for k := range scoremap {fmt.Printf(k)}}
  • 注意:遍歷map時的元素順序與添加鍵值對的順序毫無關系

1.1.5、使用delete()函數刪除鍵值對

  • 使用delete()內建函數從map中刪除一組鍵值對,delete()函數的格式如下:
delete(map, key)
  • 其中
map: 表示要刪除鍵值對的map
key: 表示要刪除的鍵值對的key
  • 示例代碼如下
func main() {scoremap := make(map[string]int)scoremap["張三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60delete(scoremap, "小明")for k, v := range scoremap {fmt.Printf(k, v)}}

1.1.6、按照指定順序遍歷map

func main() {rand.Seed(time.Now().UnixNano()) // 初始化隨機種子var scoreMap = make(map[string]int, 200)for i := 0; i < 100; i++ {key := fmt.Sprintf("stu%02d", i) // 生成stu開發的字符串value := rand.Intn(100)          // 生成0-99的隨機整數scoreMap[key] = value}// 取出map中的所有key存入切片keysvar keys = make([]string, 0, 200)for key := range scoreMap {keys = append(keys, key)}// 對切片進行排序sort.Strings(keys)for _, key := range keys {fmt.Println(key, scoreMap[key])}}

1.1.7、元素為map類型的切片

  • 下面的代碼演示了切片中的元素為map類型時的操作
func main() {// 使用make初始化一個map類型的切片var mapSlice = make([]map[string]string, 3)for index, value := range mapSlice {fmt.Printf("index: %d value: %v\n", index, value)}fmt.Println("init data")// 在mapSlice這個切片的第0個位置, 創建一個容量為10的map,并進行賦值mapSlice[0] = make(map[string]string, 10)mapSlice[0]["name"] = "王五"mapSlice[0]["password"] = "123456"mapSlice[0]["address"] = "紅旗大街"for index, value := range mapSlice {fmt.Printf("index: %d value: %v\n", index, value)}}

1.1.8、值為切片類型的map

  • 下面的代碼演示了map中值為切片類型的操作
func main() {var sliceMap = make(map[string][]string, 3)fmt.Println(sliceMap)fmt.Println("init data")key := "中國"value, ok := sliceMap[key]if !ok {value = make([]string, 0, 2)}value = append(value, "北京", "上海")sliceMap[key] = valuefmt.Println(sliceMap)
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91509.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Orange的運維學習日記--23.Linux計劃任務詳解

Orange的運維學習日記–23.Linux計劃任務詳解 文章目錄Orange的運維學習日記--23.Linux計劃任務詳解一次性計劃任務atd 服務at 命令基本語法交互式示例腳本文件示例timespec 格式示例查看與管理任務查看當前隊列查看任務詳細內容刪除任務用戶權限控制用戶周期性計劃任務查看任務…

Ubuntu 24.04.2 LTS 安裝mysql8.0.36保姆級教程(從安裝到遠程連接)

目錄 前言 一、系統準備 二、安裝 MySQL 8.0.36 1. 查看可用版本 2.如果沒有對應版本則需要手動下載mysql-apt-config&#xff08;有則跳過&#xff09; 2.1下圖是mysql-apt-config各版本對應的mysql版本 2.2下載mysql apt repository 2.3安裝 MySQL APT Repository 包 …

【LLM】講清楚MLA原理

需要你對MHA、MQA、GQA有足夠了解&#xff0c;相信本文能幫助你對MLA有新的認識。 本文內容都來自https://www.youtube.com/watch?v0VLAoVGf_74&#xff0c;如果閱讀本文出現問題&#xff0c;建議直接去看一遍。 按照Deepseek設定一些參數值&#xff1a;輸入token長度n10&…

谷歌采用 Ligero 構建其 ZK 技術棧

1. 引言 前序博客有&#xff1a; Ligero 和 Ligetron 中的 MPC 和 ZKLigetron&#xff1a;Nim Network開發的針對AI的zkVMLigetron&#xff1a;基于MPC-In-The-Head范式的zkVM簡介 在隱私保護身份驗證領域邁出重要一步&#xff0c;谷歌最近宣布 將零知識證明&#xff08;ZKP…

Flutter渲染引擎:Impeller和Skia

一、Impeller 渲染引擎的發布時間Impeller 是 Flutter 團隊為解決 Skia 引擎在移動端&#xff08;尤其是 iOS 平臺&#xff09;的性能問題而開發的全新渲染引擎&#xff0c;其發展歷程如下&#xff1a;首次公開&#xff1a;2021 年 Google I/O 大會上首次提及&#xff0c;作為 …

網絡編程-加密算法

目錄 一.網絡編程基礎 1. 概述 2. IP地址 3. 域名 4. 網絡模型 5. 常用協議 6. 小結 二.TCP編程 1. 什么是Socket&#xff1f; 2. 服務器端 3. 客戶端 4. Socket流 5. 小結 三.UDP編程 1. 概述 2. 服務器端 3. 客戶端 4. 小結 案例&#xff1a; 四.加密算法 …

【網絡工程師軟考版】網絡安全

任何形式的網絡服務都會導致安全方面的風險&#xff0c;問題是如何將風險降到最低程度&#xff0c;目前的網絡安全措施有數據加密、數字簽名、身份認證、防火墻、特征過濾等。所涉內容&#xff1a;1、網絡安全基礎2、加密技術與哈希算法3、數字簽名4、數字證書5、VPN技術6、防火…

深入淺出設計模式——創建型模式之建造者模式 Builder

文章目錄建造者模式簡介建造者模式結構建造者模式代碼實例定義產品類House定義建造者定義抽象建造者AbstractBuilder定義具體建造者定義指揮者客戶端代碼示例運行結果建造者模式總結代碼倉庫建一棟房子總共分幾步&#xff1f;建造者模式告訴你答案&#xff01;“把大象裝冰箱&a…

OpenVLA: 論文閱讀 -- 開源視覺-語言-行動模型

更多內容&#xff1a;XiaoJ的知識星球 目錄OpenVLA&#xff1a;開源視覺-語言-行動模型1. 介紹2. 相關工作1&#xff09;視覺條件語言模型&#xff08;Visually-Conditioned Language Models&#xff09;2&#xff09;通用型機器人策略&#xff08;Generalist Robot Policies&a…

JavaWeb(蒼穹外賣)--學習筆記15(分頁查詢PageHelper)

前言 終于開始學習做項目了&#xff0c;本篇文章是學習B站黑馬程序員蒼穹外賣的學習筆記&#x1f4d1;。我的學習路線是Java基礎語法-JavaWeb-做項目&#xff0c;管理端的功能學習完之后&#xff0c;就進入到了用戶端微信小程序的開發&#xff0c;這篇文章來看看分頁查詢&#…

金融專題|某跨境支付機構:以榫卯企業云平臺 VPC 功能保障業務主體安全

作者&#xff1a;SmartX 金融團隊 金融機構在信息化建設時面臨諸多數據合規要求&#xff0c;例如&#xff1a;不同業務區域之間互相隔離、數據庫僅能由關聯的應用服務器訪問、僅有特定的服務器允許被外網訪問等。對此&#xff0c;某跨境支付機構以 SmartX 榫卯企業云平臺構建私…

Win10下python環境變量呼出微軟應用商店

以下是三種徹底解決 Windows 10 的 CMD 中運行 python 命令彈出應用商店問題的方法??方法一&#xff1a;調整環境變量優先級?-或者直接刪除微軟應用商店的環境變量%USERPROFILE%\AppData\Local\Microsoft\WindowsApp???操作步驟??打開系統環境變量設置&#xff08;右鍵…

字節跳動“扣子”(Coze)開源:AI智能體生態的技術革命

&#xff08;以下借助 DeepSeek-R1 輔助整理&#xff09; 在2025年7月26日的深夜&#xff0c;GitHub上悄然出現的兩個倉庫——Coze Studio和Coze Loop&#xff0c;在48小時內狂攬超過9,000顆Star。字節跳動以Apache 2.0許可證將自家AI智能體平臺的核心技術徹底開源。 “當所有人…

Camx-usecase ID和pipeline的匹配源碼解讀

組件關系整體流程&#xff1a;camxhal3.cpp:704 open()camxhal3.cpp:1423 configure_streams()chxextensionmodule.cpp:2810 InitializeOverrideSessionchxusecaseutils.cpp:850 GetMatchingUsecase()chxadvancedcamerausecase.cpp:4729 Initialize()chxadvancedcamerausecase.…

日志管理進入「對話式」時代:日志易MCP Server落地實錄

01 背景&#xff1a;MCP協議介紹在AI蓬勃發展的當下&#xff0c;大型語言模型&#xff08;LLM&#xff09;雖展現出強大潛力&#xff0c;卻受困于與外部資源連接的難題。數據分散、接口繁雜&#xff0c;致使AI模型難以靈活對接本地資源與遠程服務&#xff0c;極大限制了其響應質…

django-3模型操作

from django.db import modelsclass Book(models.Model):title models.CharField(max_length200) # 書名author models.CharField(max_length100) # 作者publish_date models.DateField() # 出版日期price models.DecimalField(max_digits10, decimal_places2) # 價格s…

【繪制圖像輪廓】——圖像預處理(OpenCV)

目錄 1 什么是輪廓 2 尋找輪廓 2.1 mode參數 2.2 method參數 3 繪制輪廓 1 什么是輪廓 輪廓是一系列相連的點組成的曲線&#xff0c;代表了物體的基本外形。輪廓是連續的&#xff0c;邊緣不一定連續。輪廓是一個閉合的、封閉的形狀。 輪廓的作用&#xff1a; 形狀分析 目…

嵌入式 Linux 深度解析:架構、原理與工程實踐(增強版)

嵌入式 Linux 深度解析&#xff1a;架構、原理與工程實踐&#xff08;增強版&#xff09; 目錄嵌入式 Linux 深度解析&#xff1a;架構、原理與工程實踐&#xff08;增強版&#xff09;第一章 嵌入式 Linux 基礎概念1.1 定義與核心特征1.2 典型架構棧深度解析第二章 Linux 文件…

xcode swift項目運行、連接真機運行報錯,引入文件夾失敗

最近亂七八糟解決了很多報錯&#xff0c;看著記錄點吧 xcode版本&#xff1a;16 failed to emit precompiled header ‘/Users/yuqing/Library/Developer/Xcode/DerivedData/cloudspace-ios-ejldldcfhouqnretchuzoewmsqkg/Build/Intermediates.noindex/PrecompiledHeaders/spic…

[python][selenium] Web UI自動化8種頁面元素定位方式

測試工程師必備&#xff01;Selenium自動化測試全攻略 | 手寫POM框架數據驅動&#xff0c;輕松搞定UI自動化&#xff01;簡單的加個前置知識&#xff1a; 第一&#xff1a;webdriver.Chrome()這句話&#xff0c;通過WebDriver的構造方法&#xff0c;拿到瀏覽器驅動的對象&…