go语言map、实现set

简介: go语言map、实现set

一、map定义、访问、遍历

package map_test
 
import "testing"
 
//map
func TestMap(t *testing.T) {
  //定义并初始化
  m := map[string]int{"one": 1, "two": 2, "three": 3}
  t.Log(m["one"])
  t.Logf("m len=%d", len(m))
  //定义
  m1 := map[string]int{}
  //添加元素
  m1["four"] = 4
  //使用make定义,合理的初始容量,提交性能
  m2 := make(map[string]int, 10)
  t.Log(m, m1, m2)
}
 
//map访问的key不存在是,仍会返回零值,不能通过nil来判断元素是否存在
func TestAccessNotExistingKey(t *testing.T) {
  //创建map
  m1 := map[int]int{}
  t.Log(m1[1])
  m1[2] = 0
  t.Log(m1[2])
  //使用ok判断是否存在
  if _, ok := m1[3]; ok {
    t.Log("key 3 is existing.")
  } else {
    t.Log("key 3 is not existing.")
  }
}
 
//遍历
func TestTravelMap(t *testing.T) {
  m := map[string]int{"one": 1, "two": 2, "three": 3}
  for key, value := range m {
    t.Log(key, value)
  }
}
=== RUN   TestMap
    map_test.go:9: 1
    map_test.go:10: m len=3
    map_test.go:17: map[one:1 three:3 two:2] map[four:4] map[]
--- PASS: TestMap (0.00s)
=== RUN   TestAccessNotExistingKey
    map_test.go:24: 0
    map_test.go:26: 0
    map_test.go:31: key 3 is not existing.
--- PASS: TestAccessNotExistingKey (0.00s)
=== RUN   TestTravelMap
    map_test.go:39: three 3
    map_test.go:39: one 1
    map_test.go:39: two 2
--- PASS: TestTravelMap (0.00s)
PASS

二、map值使用函数

func TestMapWithFunValue(t *testing.T) {
  m := map[int]func(op int) int{}
  m[1] = func(op int) int { return op }
  m[2] = func(op int) int { return op * op }
  m[3] = func(op int) int { return op * op * op }
  t.Log(m[1](2), m[2](2), m[3](2))
}
=== RUN   TestMapWithFunValue
    map_ext_test.go:11: 2 4 8
--- PASS: TestMapWithFunValue (0.00s)
PASS

三、map实现set

//map实现set
func TestMapForSet(t *testing.T) {
  mySet := map[int]bool{}
  //添加
  mySet[1] = true
  n := 6
  //判断是否存在
  if mySet[n] {
    t.Logf("%d is existing", n)
  } else {
    t.Logf("%d is not existing", n)
  }
  //  输出长度
  t.Log(len(mySet))
  //  删除元素
  delete(mySet, 1)
 
}
=== RUN   TestMapForSet
    map_ext_test.go:24: 6 is not existing
    map_ext_test.go:27: 1
--- PASS: TestMapForSet (0.00s)
PASS
相关文章
|
10天前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
40 10
|
1天前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
14 6
【数据结构】map&set详解
|
8天前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
10天前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
33 10
|
10天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
7天前
|
存储 监控 数据可视化
Go 语言打造公司监控电脑的思路
在现代企业管理中,监控公司电脑系统对保障信息安全和提升工作效率至关重要。Go 语言凭借其高效性和简洁性,成为构建监控系统的理想选择。本文介绍了使用 Go 语言监控系统资源(如 CPU、内存)和网络活动的方法,并探讨了整合监控数据、设置告警机制及构建可视化界面的策略,以满足企业需求。
25 1
|
14天前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
11天前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
16天前
|
Go
golang语言之go常用命令
这篇文章列出了常用的Go语言命令,如`go run`、`go install`、`go build`、`go help`、`go get`、`go mod`、`go test`、`go tool`、`go vet`、`go fmt`、`go doc`、`go version`和`go env`,以及它们的基本用法和功能。
25 6
|
16天前
|
Go
Golang语言之映射(map)快速入门篇
这篇文章是关于Go语言中映射(map)的快速入门教程,涵盖了map的定义、创建方式、基本操作如增删改查、遍历、嵌套map的使用以及相关练习题。
21 5