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

全部留言(10)

  • 最新
  • 精选
苏格拉没底
请问能否将终端的输出结果写入到一个文件中?以做后续的分析处理,谢谢

作者回复: 最简单的方法是: go test -v polymorphsim_test.go >> 1.txt

2019-12-17
2
FR
老师,请问下为什么我的benchmark输出参数只有PASS ok trgo/src/ch35/benchmark 0.224s,执行的命令也是go test -bench=.

作者回复: 加上-v的参数

2021-06-24
sasmiditer
...buff那个函数,变量buf的声明是否应该放在循环外面?

作者回复: "for i := 0; i < b.N; i++ " 外面这个循环是用来控制测试次数的

2019-10-21
asdf100
-benchmem 参数的输出结果那两列表示的什么意思?一直没有找到比较详情的解释

作者回复: 代码被运行的次数,单次的运行时间

2019-04-06
虢國技醬
B/op:每次操作分配的内存字节数 allocs/op:每次操作分配内存的次数
2019-07-27
13
escray
Benchmark 用于对代码片段或者第三方库进行性能测试 - 方法名以 Benchmark 开头 - 参数类型是 *testing.B - 用 b.ResetTimer( ) 和 b.StopTimer() 来隔离与性能测试无关的代码 - 性能测试交给 framework 来做,将需要测试的代码放在循环中,循环的次数由 framework 来返回 在留言里面看到关于将 buf 的声明是否放在性能测试中,也就是外层 for 循环的讨论 ``` var buf bytes.Buff ``` 如果从性能比较上来讲,buf 和 str 的声明都应该放在控制测试次数的 for 循环内。 但是如果把 buf 和 str 的声明都挪到 for 循环的外面,可以看到对于 str 的影响会更大一些,但是这个和本次性能测试无关,应该是由 string 和 bytes.Buff 的特性决定的。
2021-04-11
2
slssdhs
如果发现运行 go test -bench=. 仅给出一行类似 ok Study/src/ch35/benchmark 0.037s 这样的输出 请确认是否使用的是Windows PowerShell 如果是请切换到 命令行 或者说 CMD 执行 就能获得与视频一样的输出了
2022-12-05
1
刚测试了一下,测试将测试程序代码段单独封装 func ConcatStringByAdd(elems []string) string{ ret := "" for _, elem := range elems { ret += elem } return ret } func ConcatStringByBytesBuffer(elems []string) string{ var buf bytes.Buffer for _, elem := range elems { buf.WriteString(elem) } return buf.String() } 然后进行对比测试,发现buffstirng 操作了多一次内存分配,是什么原因呢? func BenchmarkConcatStringByAdd(b *testing.B) { elems := []string{"1", "2", "3", "4", "5"} b.ResetTimer() for i := 0; i < b.N; i++ { ret := "" for _, elem := range elems { ret += elem } } b.StopTimer() } func BenchmarkConcatStringByAddFunc(b *testing.B) { elems := []string{"1", "2", "3", "4", "5"} b.ResetTimer() for i := 0; i < b.N; i++ { ConcatStringByAdd(elems) } b.StopTimer() } func BenchmarkConcatStringByBytesBuffer(b *testing.B) { elems := []string{"1", "2", "3", "4", "5"} b.ResetTimer() for i := 0; i < b.N; i++ { var buf bytes.Buffer for _, elem := range elems { buf.WriteString(elem) } } b.StopTimer() } func BenchmarkConcatStringByBytesBufferFunc(b *testing.B) { elems := []string{"1", "2", "3", "4", "5"} b.ResetTimer() for i := 0; i < b.N; i++ { ConcatStringByBytesBuffer(elems) } b.StopTimer() } 测试结果: goos: windows goarch: amd64 pkg: ch35/benchmark cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz BenchmarkConcatStringByAdd-8 11933446 97.55 ns/op 16 B/op 4 allocs/op BenchmarkConcatStringByAddFunc-8 12663584 97.21 ns/op 16 B/op 4 allocs/op BenchmarkConcatStringByBytesBuffer-8 23991170 50.52 ns/op 64 B/op 1 allocs/op BenchmarkConcatStringByBytesBufferFunc-8 17990841 64.41 ns/op 69 B/op 2 allocs/op PASS ok ch35/benchmark 5.486s
2023-02-02
Return12321
完全可以把输出的结果字段解释补上的
2022-03-09
噼里啪啦啪啦噼里噼里啪啦
func concatStringByAdd(elems []string) string { retString := "" for _, elem := range elems { retString += elem } return retString } func concatStringByBytesBuffer(elems []string) string { var buf bytes.Buffer for _, elem := range elems { buf.WriteString(elem) } return buf.String() } 老师,请问我把函数单独定义了,没有写道Test里. 然后用go test -bench=. -benchmem就没有相关信息了。请问是为什么呢 $ go test -bench=. -benchmem goos: windows goarch: amd64 cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz BenchmarkConcatStringByAdd-8 1000000000 0 B/op 0 allocs/op BenchmarkConcatStringByBytesBuffer-8 1000000000 0 B/op 0 allocs/op PASS ok _/F_/Work/open_courses/learninggo/Chao_s_55_Sessions_of_Golang/ch29/benchmark 0.134s
2021-08-10
收起评论