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 语言从入门到实战
登录|注册
留言
19
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 28 | 任务的取消
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 | 结课测试&结束语
登录 后留言

全部留言(19)

  • 最新
  • 精选
亚东
strict{}{},作为赋值的时候,为什么有两个{}?

作者回复: struct{}表示空结构,第二个表示实例化这个空结构

2019-03-23
2
11
Aiden
老师您好, func cancel_1传给channel一个值,isCancelled取出一个值返回true容易理解, 在func cancel_2中,函数close了channel后,为什么isCancelled函数依然返回true? 我改写了该程序如下,<-cancelCh自己返回的bool值在close的情况下返回的就是false,这里应该怎么理解? func TestCancel(t *testing.T) { cancelChan := make(chan int, 0) for i := 0; i < 5; i++ { go func(i int, cancelCh chan int) { for { if _, ok := <-cancelCh; !ok {//这里ok=false? break } time.Sleep(time.Millisecond * 5) } fmt.Println(i, "Cancelled") }(i, cancelChan) } close(cancelChan) time.Sleep(time.Second * 1) }

作者回复: func isCancelled(cancelChan chan struct{}) bool { select { case <-cancelChan: return true default: return false } } close(cancelChan)会使所有处于处于阻塞等待状态的,消息接收者(<-cancelChan)返回,所以上面的代码case <-cancelChan分支就会执行下去,返回true

2019-09-28
3
3
Geek_427d0c
老师好,请教一下,为什么下面的程序会一直卡住直到go test的启动超时参数超时: func TestA(t *testing.T) { ch := make(chan string) ch <- "Hi" select { case ret:= <-ch: fmt.Println("channel receives", ret) default: t.Log("default") } }

作者回复: 这是因为ch<-"Hi"这一句就被阻塞了,都没有办法执行到下面的接收部分

2020-09-28
2
Roy
老师,您这个用 sleep() 的方案不好,我结合前面学的知识,用 sync.WaitGroup 写了一个优化版,我测试了一下是ok的,老师看看 ok 不?

作者回复: 赞啊。给大家分享一下。

2021-06-30
1
Kvicii.Y
func TestChannel(t *testing.T) { channel := make(chan struct{}, 0) for i := 0; i < 5; i++ { go func() { for { if isCanceled(ch) { break } time.Sleep(time.Millisecond * 5) } fmt.Println(i, "cancel") }() } // cancel_1(channel) cancel_2(channel) time.Sleep(time.Millisecond * 1) } 我没有在go func()中传入参数也是可以运行的,go func(){}()前后的()有什么意义呢?后一个()代表外部传入参数?第一个()代表形参类型所以需要完全声明?

作者回复: 第一个是方法定义(这里没有入参定义),第二个代表方法调用

2020-03-13
1
宝仔
通过select来判断任务是否被取消的话,下面的代码都被阻塞了老师,这样time.Sleep(time.Millisecond * 5000)还有什么意义,望老师回答

作者回复: func isCancelled(cancelChan chan struct{}) bool { select { case <-cancelChan: return true default: return false } } 注意一下 select下的default,<-cancelChan阻塞的时候,就会立即运行default分支

2020-07-20
2
鹤涵
func isCanceled(cancelCh chan struct{}) bool { select { case <-cancelCh: return true default: return false } } channel close 也会触发select case <-cancelCh 为什么呢

作者回复: close chan也会使得等待读取操作马上返回

2020-07-12
二师兄
```go func TestCancel(t *testing.T) { cancelCh := make(chan struct{}, 0) for i := 0; i < 3; i++ { go func(i int, cc chan struct{}) { for { if isCancelled(cc) { break } else { fmt.Println(i, "Not Yet") } time.Sleep(time.Millisecond * 5) } fmt.Println(i, "Canceled") }(i, cancelCh) } time.Sleep(time.Millisecond * 100) // ???? 如果加上这一行, 就看不到Canceled的输出 cancel2(cancelCh) } ``` 如果我在cancel2调用之前, 增加一个sleep, 则只会输出“Not Yet”, 不会看到“Canceled”, 请问老师这是什么原因呢?

作者回复: 应该没有问题的,看看你是不是把cancel后面的sleep删除了

2019-04-28
2
Ian
func cancel_2(cancelChan chan struct{}){ close(cancelChan) } 这里,为什么都会收到?没弄明白。本节课也听的有点糊涂。

作者回复: close有一种类似广播的效果,所有处于接收等待状态的接收者都会立即返回。你在仔细看一遍视频,并试试示例代码就清楚了。

2019-04-18
张先森、
为什么每次都是4 Canceled ,不应该是从这5个协程里面随机选一个吗?
2019-04-26
8
9
收起评论