Go 语言从入门到实战
蔡超
Mobvista 技术副总裁兼首席架构师,前亚马逊(中国)首席软件架构师
48919 人已学习
新⼈⾸单¥59
课程目录
已完结/共 55 讲
第一章:Go语言简介 (4讲)
第二章:基本程序结构 (4讲)
第三章:常用集合 (3讲)
第四章:字符串 (1讲)
时长 16:47
第五章:函数 (2讲)
第六章:面向对象编程 (4讲)
第七章:编写好的错误处理 (2讲)
第八章:包和依赖管理 (2讲)
第九章:并发编程 (7讲)
第十章:典型并发任务 (5讲)
第十一章:测试 (3讲)
时长 11:48
时长 07:12
时长 06:15
第十二章:反射和Unsafe (3讲)
时长 08:18
时长 08:03
第十三章:常见架构模式的实现 (2讲)
第十四章:常见任务 (4讲)
时长 04:27
时长 05:14
第十五章:性能调优 (4讲)
第十六章:高可用性服务设计 (5讲)
Go 语言从入门到实战
登录|注册
留言
24
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 11 | Map与工厂模式,在Go语言中实现Set
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | Go语言课程介绍
02 | 内容综述
03 | Go语言简介:历史背景、发展现状及语言特性
04 | 编写第一个Go程序
05 | 变量、常量以及与其他语言的差异
06 | 数据类型
07 | 运算符
08 | 条件和循环
09 | 数组和切片
10 | Map声明、元素访问及遍历
11 | Map与工厂模式,在Go语言中实现Set
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 framework
42 | 实现micro-kernel framework
43 | 内置JSON解析
44 | easyjson
45 | HTTP服务
46 | 构建RESTful服务
47 | 性能分析工具
48 | 性能调优示例
49 | 别让性能被锁住
50 | GC友好的代码
51 | 高效字符串连接
52 | 面向错误的设计
53 | 面向恢复的设计
54 | Chaos Engineering
55 | 结课测试&结束语
登录 后留言

全部留言(24)

  • 最新
  • 精选
月寒风清
老师可以解释下什么是Dock type吗?

作者回复: duck typing 俚语:如果一个东西像鸭子一样走路和呱呱叫,那么它一定是鸭子 计算机领域中,duck typing相对应的是normal typing(对象的类型决定了对象的特性),duck typing中对象的类型不重要,只要对象有类型A的方法和属性,那么它被当做类型A来使用。 所以,在Go中只要你的对象拥有某个接口定义的方法,就可以当作那个接口类型的实例来使用,无需显式的声明

2020-01-03
2
8
刘楠
set情况下,value只能是true吗?如果为false,判断就会不存在了

作者回复: 没错,添加元素要设置true

2019-03-08
2
6
登高
请问老师,用map做set时也常用map[type]struct{},更好的实践是哪一种呢?还是根据使用场景来选择?

作者回复: 我认为map[type]bool更好,代码会更自然,如判断一个元素是否存在 if m[key] {...}

2019-03-08
2
5
styun
老师问下,set时候,map后面的花括号的作用是什么,不加也可以吧

作者回复: 表示创建一个map实例。如果不要花括号可以用make来创建:set := make(map[int]bool)

2019-08-13
3
4
卡乐
老师能不能推荐一本入门级的书看一下,感觉看课程之余再多看看书才能够更快更好的理解。

作者回复: head first go

2019-03-07
2
范飞扬
写了个打折策略对象的工厂模式,更贴近实战 type discountStrategy interface { Discount(p float32) float32 } type normalDiscount struct { } func (d *normalDiscount) Discount(p float32) float32 { return p * 0.9 } type double11Discount struct { } func (d *double11Discount) Discount(p float32) float32 { return p * 0.5 } func TestMapWithStrategyPattern(t *testing.T) { m := map[string]discountStrategy{ "normal": &normalDiscount{}, "double11": &double11Discount{}, } t.Log(m["normal"].Discount(100), m["double11"].Discount(100)) // 90 50 }

作者回复: 👍

2022-10-29
1
butterfly
怎么实现有序的map,set? 有些场景需要插入和删除的效率在o(logn),有序的map是适合的. 如果是放入map,再取出来排序的方式,对于写少读多,但需要集合中元素有序的情况,却是不太适合

作者回复: 你可以参考java的TreeMap的实现方式,自己实现一下

2019-03-25
1
正义柔情永在
老师:百忙之中,跪请解惑啊 //===============定义接口======================= package interfaces type TCPGet interface { Get(url string) string } type TCPPost interface { Post(url string) string } type TCP interface { TCPGet TCPPost } //=======定义实现=============================== package interfaces type Http struct { Content string } func (http Http) Get(url string) string { return http.Content+"->this is get request" } func (http Http) Post(url string) string { return http.Content+"->this is post request" } //=================主程序======================== const url ="http://www.baidu.com" func main() { var myhttpStruct = interfaces.Http{Content: "接口测试"} //接口可以指向实现了该接口的结构体的指针, //这个指针通过解地址就可以拿到这个结构体, //问题1:老师,go语言中是不是实现了某个接口的结构体的指针都可以使用该接口去接收? var http interfaces.TCP = &myhttpStruct fmt.Printf("%T , %T ,%T\n",myhttpStruct,http,&http) Myrequest(&http) //获取到这个接口的指针,也就是 这个结构体的指针的指针 var httpx * interfaces.TCP = &(&interfaces.Http{Content: "接口测试"}) //问题2,老师,为什么这种语法就不行呢? fmt.Printf("%T\n",httpx) } func Myrequest(http * interfaces.TCP) {//这个 //http 是接口的指针,通过解一次地址获取到的是结构体的指针,通过结构体的指针调用该结构体下的方法 fmt.Printf("%T , %T\n",http,*http) fmt.Println((*http).Get(url)) fmt.Println((*http).Post(url)) }

作者回复: 第一个问题答案是“是” 第二个问题是因为 接口对应的是结构体的指针,我们不使用接口的指针(因为他指向的并不是实现接口的具体类型) 所以你的方法应该定义为 func Myrequest(http interfaces.TCP)

2019-03-12
1
这个没有验证元素的唯一性吧?

作者回复: key在map中是唯一的

2019-05-08
4
多米
非常赞;但是 能不能在提高下难度哈!

作者回复: 进阶课程会更有难度。整体课程的宗旨是简明,希望能够让你把其他语言的编程经验快速发挥到Go中,同时,又能掌握Go语言的独特编程特性。

2019-03-09
收起评论