快速掌握 Go 语言中的集合(map)

简介: 快速掌握 Go 语言中的集合(map)

快速掌握 Go 语言中的集合(map)


我本来下午打算对新系统,好好研究下模块划分,但因为上一个版本提测,于是我改了一个下午的bug


现在是晚上 9 点钟我开始写这篇文章,给大家分析分析Go语言中的map


映射关系容器 map


Go语言提供的映射关系容器为 mapmap 使用散列表hash实现。查找复杂度为O(1),和数组一样,最坏的情况下为O(n),n为元素总数。


这就是Gomap的定义格式。


map[keyType] valueType


注意了,map 是一种引用类型,初值是nil,定义时必须用make来创建,否则会报错


panic: assignment to entry in nil map


必须要申请空间,所有的引用类型都要这么做


var m map[string]string
m = make(map[string]string)


当然,也可以这么写


m := make(map[string]string)


使用

赋值


m["name"] = "coding3min"
  m["sex"] = "man"


循环遍历


for key := range m {
    // 原来不用Printf也可以完成拼接输出啊!
    fmt.Println("key:", key, ",value:", m[key]) 
}


删除集合元素

delete(m, "name")


PS: 在取值的时候m[key],假如key不存在,不会报错,会返回value类型的默认值,比如int类型默认值为0


当然了,如果你想明确的知道元素是否存在,如下:

  if value, ok := m[key]; ok {
    fmt.Println(key, "存在,值为:", value)
  } else {
    fmt.Println(key, " 不存在")
  }

map容器就到这里了。


能够在兵法环境中使用的map


Go中的map在并发读的时候没问题,但是并发写就不行了(线程不安全),会发生竞态问题。

所以有一个叫sync.Map的封装数据结构供大家使用,简单用法如下:

定义和存储


  var scene sync.Map
  scene.Store("name", "coding3min")
  scene.Store("age", 11)

取值


v, ok := scene.Load("name")
  if ok {
    fmt.Println(v)
  }
  v, ok = scene.Load("age")
  if ok {
    fmt.Println(v)
      }


输出

coding3min
11


删除和遍历,这里遍历就用到了函数当作参数传递和匿名函数的知识。


scene.Delete("age")
  scene.Range(func(key, value interface{}) bool {
  fmt.Println("key:",key,",value:",value)
  return true
  })

the end,今天的更新还没完,次条还有切片知识补充哦

相关文章
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
352 1
|
5月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
308 2
|
6月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
180 4
|
9月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
333 43
|
7月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
457 1
|
8月前
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
371 1
|
7月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
511 0
|
7月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
340 0
|
7月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
391 0
|
7月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
426 0

热门文章

最新文章