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
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 12 | 字符串
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)

  • 最新
  • 精选
CcczzZ
老师,在使用strconv.Itoa 和 strconv.Atoi 方法做数字、字符串转换的时候,对这两个函数名不太理解,为什么会起这样的名称呢? 比如 strconv.Itoa 方法,数字转换为字符串,我知道 I 就是 int 的简化,那么 a 又怎么理解呢?为什么是 I => to => a,想知道这个 a 是怎么来的,为什么会起这个名称,我感觉知道的话也方便记忆和使用吧。 为什么不是起名不是更直观的 strconv.Itos,这样的话能看出来是 int 类型转换为 string 类型,都是简称。 不然这两个函数总不能死记硬背哇😂

作者回复: atoi和itoa其实最早出现在C的函数库中, a表示ASCII,i表示integer

2020-02-18
4
19
stopper
建议老师解释,为什么要以slice设计string

作者回复: 这个问题其实官方并没有给出解释,我个人认为string通过slice来实现,可以利用不同slice重用后端连续存储空间的概念(参考该课程相关章节)。这样来实现与其他语言类似的相同内容的字符串复用同一存储空间, 甚至子串也可重用存储空间。 str1 := "Hello" str2 := "Hello" header1 := (*reflect.StringHeader)(unsafe.Pointer(&str1)) header2 := (*reflect.StringHeader)(unsafe.Pointer(&str2)) fmt.Println(header1.Data == header2.Data) //true

2019-05-29
13
kkgo
rune()用来打印unicode编码吗?

作者回复: 可以用来获取string中的unicode字符,

2019-03-11
6
yrion
rune用来提取其中的unicode

作者回复: 同样可以输出unicode字符

2019-03-13
2
3
愚者
已知utf-8编码下的"严"就是EAB8A5,想问下\x 表示什么意思呢

作者回复: 表示后面的内容是16进制的编码

2020-01-02
2
颜海航
老师 为什么编码前面都要带0x

作者回复: 代表16进制

2022-04-29
万能的芝麻酱
关于字符集编码的知识,池大还是冯达曾经推送过阮一峰老师的博客,讲的很清晰,我每次糊涂的时候就打开重新开一遍……(http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html?from=timeline)
2019-03-11
2
29
青青树
根据个人实验:[]rune("string") 把string类型强制转换为rune切片,转换过程不是在string的存储二进制每四个字节即为一个rune数字的单纯二进制拷贝转换,而是通过utf-8的编码规则,转换为unicode code point,如果不是通过utf-8编码规则的转换的话,那么也就意味着string类型也可以每两个字节转换为[]int16,通过个人测试是不可以转换的,老师在讲解中说可以写入任何二进制数据,经过实验这个需要个前提是不违背utf-8编码规则,如果违背了编码规则,写入没有问题,但是统计长度和unicode code point转换(也就是转为[]rune)的时候就会出现一些意外结果,比如"中"字: unicode code point :20013(4E2D) 1001110 00101101, 根据utf-8编码规则应该是3字节, 按1110xxxx 10xxxxxx 10xxxxxx 填充后得到, 11100100 10111000 10101101(E4B8AD), 那么我们破坏utf-8编码规则 将最后的字节10xxxxxx 改为00xxxxxx, 即10101101改为00101101 后得到11100100 10111000 00101101(E4B82D), 将E4B82D当字符串写入: s := "\xe4\xb8\x2d" r := []rune(s) t.log(len(s))//3 t.log(r)//[65533 65533 45] 这个unicode code point 已经完全不靠谱了, 而后又测试将其转换为[]byte类型,发现就是简单暴力的单字节的二进制拷贝转换(228 184 45)。没有utf-8这种隐藏规则。
2019-12-11
1
6
stopper
全程快进看,感觉可用的内容不多
2019-05-29
3
Flygar
// string is the set of all strings of 8-bit bytes, conventionally but not // necessarily representing UTF-8-encoded text. A string may be empty, but // not nil. Values of string type are immutable. type string string // byte is an alias for uint8 and is equivalent to uint8 in all ways. It is // used, by convention, to distinguish byte values from 8-bit unsigned // integer values. type byte = uint8 // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune = int32
2019-03-14
3
收起评论