下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 10 | Map声明、元素访问及遍历
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Go语言从入门到实战

共55讲 · 55课时,约700分钟
6139
免费
01 | Go语言课程介绍
免费
02 | 内容综述
免费
03 | Go语言简介:历史背景、发...
免费
04 | 编写第一个Go程序
免费
05 | 变量、常量以及与其他语言...
06 | 数据类型
07 | 运算符
08 | 条件和循环
09 | 数组和切片
10 | Map声明、元素访问及遍历
11 | Map与工厂模式,在Go语言...
12 | 字符串
13 | Go语言的函数
14 | 可变参数和defer
15 | 行为的定义和实现
16 | Go语言的相关接口
17 | 扩展与复用
18 | 不一样的接口类型,一样的...
19 | 编写好的错误处理
20 | panic和recover
21 | 构建可复用的模块(包)
22 | 依赖管理
23 | 协程机制
24 | 共享内存并发机制
25 | CSP并发机制
26 | 多路选择和超时
27 | channel的关闭和广播
28 | 任务的取消
29 | Context与任务取消
30 | 只运行一次
31 | 仅需任意任务完成
32 | 所有任务完成
33 | 对象池
34 | sync.pool对象缓存
35 | 单元测试
36 | Benchmark
37 | BDD
38 | 反射编程
39 | 万能程序
40 | 不安全编程
41 | 实现pipe-filter framew...
42 | 实现micro-kernel frame...
43 | 内置JSON解析
44 | easyjson
45 | HTTP服务
46 | 构建RESTful服务
47 | 性能分析工具
48 | 性能调优示例
49 | 别让性能被锁住
50 | GC友好的代码
51 | 高效字符串连接
52 | 面向错误的设计
53 | 面向恢复的设计
54 | Chaos Engineering
55 | 结束语
本节摘要
展开

精选留言(13)

  • 2019-03-08
    老师:您好,请教个问题,make方式来创建map的时候传递了第二个参数capcity的作用是什么,是为了当map的长度超过capcity的时候自动扩容吗?其他方式初始化map的时候,是不是底层默认了一个初始容量呢?map的底层数据结构是类似于java中hashmap的哈希表吗?

    作者回复: capacity是设置初始化容量,map会自动扩容,但扩容会导致内存分配和数据复制,所以如果能够初始化到比较适合的capacity,可以提高性能。

    1
    3
  • 2019-03-07
    因为值是int类型,所以默认是0,如果换成string类型,默认就是空字符串了
    1
    3
  • 2019-10-17
    看到一些同学说排序, 我也尝试了一下, 步骤上就是把key都存储到slice里面, 然后给key排序, 在遍历key并打印值.

    func TestSortByKey(t *testing.T) {
        m1 := map[string]int{"aa": 1, "zz": 2, "bb": 3, "yy": 4, "cc": 5, "xx": 6}
        s1 := make([]string, 0, len(m1))
        for k, _ := range m1 {
            s1 = append(s1, k)
        }
        sort.Strings(s1)
        for _, k := range s1 {
            t.Log(k, m1[k])
        }
    }
    展开
    1
  • 2019-04-08
    map中的key,如何使用对象作为key.
    现在项目中都是使用一个string作为key,但有时一个string是不够的,有时需要某个对象中的两个属性来决定map中的key是否相等.像c++中map是需要一个hash函数和equal函数来判断的.
    Golang中如何处理呢?
    比如有一个对象 Person定义如下, 有这样一个map[Person]string,同时使用 person中的name和age决定一个对象是否重复,进行hash等.
    type Person struct {
     name string
     age int
    sex string
    }
    展开
    1
  • 2019-04-08
    老师,如果我的map想有序输出的话,该怎么办呢
    m2:= map[int]int{1:1,2:2,3:3,4:4}
        for k,v:=range m2{
            t.Log(k,v)
        }

        for i:=0;i<len(m2);i++{
            t.Log("--",m2[?])
        }

    定义了上面的代码,再用for ++循环的时候,没法用index
    展开
    1
  • 非常感谢老师,作为软件开发行业的老鸟,写go语言有段时间,依然能有所收获,学习就是个不断交流的过程,我们在每一次交流中都能收获心得体会,对学习常怀敬畏之心,对同行怀谦卑之心。

    作者回复: 谢谢你的鼓励!让我们大家持续学习!

    1
  • 2019-12-08
    老师,你好,为什么我的IDE运行go run或者go test的时候得3秒多的时间才能出结果,感觉应该秒出的,很简单的测试程序
  • 2019-11-26
    请问老师,既然map的取值是返回两个值,那么为什么打印语句来打印map取值时只会输出值,而不会把ok的布尔值也输出了呢?

    作者回复: fmt的输出在默认情况下是调用类型的String方法的,这样就是说map的String方法里没有输出ok这个值

  • 2019-10-17
    课程中没有说怎么删除key, 网络找资料试验了一下, 通过delete方法可以删除map中的元素

    func TestAccessNotExistingKey(t *testing.T) {
        m1 := map[int]int{}
        t.Log(m1[1])
        m1[2] = 0
        t.Log(m1[2])
        printKey3Exists(&m1, t)
        m1[3] = 0
        printKey3Exists(&m1, t)
        delete(m1, 3)
        printKey3Exists(&m1, t)
    }

    func printKey3Exists(m *map[int]int, t *testing.T) {
        if v, ok := (*m)[3]; ok {
            t.Logf("key 3's value is %d", v)
        } else {
            t.Log("key 3 is not existing.")
        }
    }
    展开
  • 2019-03-18

    func TestMapVal(t *testing.T) {
        var m = map[string]int {"one":1,"two":2,"three":3,"four":4,"five":5}
        for k,v:=range m {
            t.Log(k,v)
        }
    }
    运行后输出值为:
           Map_test.go:25: four 4
            Map_test.go:25: five 5
            Map_test.go:25: one 1
            Map_test.go:25: two 2

    想问下为什么是这种输出顺序
    展开

    作者回复: map底成是通过hash来指定存储位置的,不是有序的

  • 2019-03-18
    老师你好,我初始化了map[string]int { "1": 1, "2": 4, "3": 9, "4": 16 },当我用range进行遍历的时候,输出的结果并没有按照 1 1 , 2 4, 3 9, 4 16的顺序进行输出,我想问问range遍历有自定义排序嘛

    作者回复: map的底成采用hash表机制,不是有序的

    1
  • 2019-03-17
    nil slice和nil map是在哪里用的,只查到nil slice时在返回值是slice的时候用到,其他地方会用到吗?map呢?
  • 2019-03-17
    “capacity是设置初始化容量,map会自动扩容,但扩容会导致内存分配和数据复制”,总觉得map也是有容量大小的,但是为什么cap函数不能获取map的容量?