Go语言核心36讲
郝林
《Go并发编程实战》作者,前轻松筹大数据负责人
立即订阅
24140 人已学习
课程目录
已完结 54 讲
0/4登录后,你可以任选4讲全文学习。
开篇词+学习路线 (3讲)
开篇词 | 跟着学,你也能成为Go语言高手
免费
预习篇 | 写给0基础入门的Go语言学习者
50 | 学习专栏的正确姿势
模块一:Go语言基础知识 (6讲)
01 | 工作区和GOPATH
02 | 命令源码文件
03 | 库源码文件
04 | 程序实体的那些事儿(上)
05 | 程序实体的那些事儿(中)
06 | 程序实体的那些事儿 (下)
模块二:Go语言进阶技术 (16讲)
07 | 数组和切片
08 | container包中的那些容器
09 | 字典的操作和约束
10 | 通道的基本操作
11 | 通道的高级玩法
12 | 使用函数的正确姿势
13 | 结构体及其方法的使用法门
14 | 接口类型的合理运用
15 | 关于指针的有限操作
16 | go语句及其执行规则(上)
17 | go语句及其执行规则(下)
18 | if语句、for语句和switch语句
19 | 错误处理(上)
20 | 错误处理 (下)
21 | panic函数、recover函数以及defer语句 (上)
22 | panic函数、recover函数以及defer语句(下)
模块三:Go语言实战与应用 (27讲)
23 | 测试的基本规则和流程 (上)
24 | 测试的基本规则和流程(下)
25 | 更多的测试手法
26 | sync.Mutex与sync.RWMutex
27 | 条件变量sync.Cond (上)
28 | 条件变量sync.Cond (下)
29 | 原子操作(上)
30 | 原子操作(下)
31 | sync.WaitGroup和sync.Once
32 | context.Context类型
33 | 临时对象池sync.Pool
34 | 并发安全字典sync.Map (上)
35 | 并发安全字典sync.Map (下)
36 | unicode与字符编码
37 | strings包与字符串操作
38 | bytes包与字节串操作(上)
39 | bytes包与字节串操作(下)
40 | io包中的接口和工具 (上)
41 | io包中的接口和工具 (下)
42 | bufio包中的数据类型 (上)
43 | bufio包中的数据类型(下)
44 | 使用os包中的API (上)
45 | 使用os包中的API (下)
46 | 访问网络服务
47 | 基于HTTP协议的网络服务
48 | 程序性能分析基础(上)
49 | 程序性能分析基础(下)
尾声与思考题答案 (2讲)
尾声 | 愿你披荆斩棘,所向无敌
新年彩蛋 | 完整版思考题答案
Go语言核心36讲
登录|注册

40 | io包中的接口和工具 (上)

郝林 2018-11-12
我们在前几篇文章中,主要讨论了strings.Builderstrings.Readerbytes.Buffer这三个数据类型。

知识回顾

还记得吗?当时我还问过你“它们都实现了哪些接口”。在我们继续讲解io包中的接口和工具之前,我先来解答一下这个问题。
strings.Builder类型主要用于构建字符串,它的指针类型实现的接口有io.Writerio.ByteWriterfmt.Stringer。另外,它其实还实现了一个io包的包级私有接口io.stringWriter(自 Go 1.12 起它会更名为io.StringWriter)。
strings.Reader类型主要用于读取字符串,它的指针类型实现的接口比较多,包括:
io.Reader
io.ReaderAt
io.ByteReader
io.RuneReader
io.Seeker
io.ByteScanner
io.RuneScanner
io.WriterTo
共有 8 个,它们都是io包中的接口。
其中,io.ByteScannerio.ByteReader的扩展接口,而io.RuneScanner又是io.RuneReader的扩展接口。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Go语言核心36讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • 虢国技匠
    打卡
    对着源码io包看老师的课程,感觉讲解的非常准确,就是目前再看pipo.go文件时还是有点吃力,其他源码没什么难度
    2019-03-08
    4
  • 手指饼干
    请教老师,文中提到io包中io.Reader接口的实现类型:*io.LimitedReader、*io.SectionReader、*io.teeReader、io.multiReader、io.pipe、io.PipeReader,后三项为什么不是指针类型实现了Reader接口?

    作者回复: 它们都应该有“*”的,可以是编辑的时候落下了。我去跟极客的编辑说一下。谢谢。

    2019-10-14
  • 安排
    go语言中的操作字符串的函数都不再以\0作为字符串结束标记了吗?

    作者回复: 在底层依然以 0 结尾,只不过不会暴露出来而已。

    2019-09-22
  • 窗外
    func (b *Builder) Write(p []byte) (int, error) {
    b.copyCheck()
    b.buf = append(b.buf, p...)
    return len(p), nil
    }
    老师,帮忙看看上面的代码中p...,这个...是什么语法糖?我记得在数组章节中,不设置数组的长度时,可以这样写:var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

    作者回复: p... 相当于把数组或切片 p 中的所有元素值都作为独立的参数值传入 append 函数。

    2019-08-18
收起评论
4
返回
顶部