新書推薦:

《
破碎的杀意(“叙诡天花板”浦贺和宏!《德尔塔的悲剧》后,简中最新悬疑!)
》
售價:NT$
301.0

《
大学问·太平天国再研究
》
售價:NT$
653.0

《
九色鹿·星槎竞帆 无远弗届:大航海时代亚洲区间贸易
》
售價:NT$
657.0

《
壹卷YeBook——宋学与宋代文学观念(修订版)论世衡史丛书
》
售價:NT$
418.0

《
政通四海:清代公文、驿递和朝贡体系
》
售價:NT$
454.0

《
超级大国的撕裂:美国250年政党政治史(历史学堂)
》
售價:NT$
296.0

《
征服密码 亚欧强盛的六大要素
》
售價:NT$
383.0

《
国医名师肿瘤临证传薪录
》
售價:NT$
500.0
|
編輯推薦: |
编辑推荐
Go语言是一门日益流行的编程语言,能够制作Web应用程序与分布式网络服务等各种软件产品。Go语言相对比较简单,拥有C语言或Java语言基础的开发者,应该能够很快熟悉这门语言,然而它与C或Java之间,毕竟有着许多区别,于是开发者就会产生疑问:某项功能在Go语言里面,究竟应该如何实现?
本书是一本实用指南,其中的各个技巧能够帮助读者认清常见的问题,并拿出有效的Go语言解法。每个技巧都包含自成一体的范例代码,你可以根据自身需求加以运用,另外,作者还讨论了这些解决方案的运作原理。刚接触Go语言的人,能够在学习这些解法的过程中,迅速积累知识,有经验的Go语言开发者,则可以将这些行之有效的代码,直接复制到自己的程序里面,以节省时间。
专家推荐
“刚接触Go语言的开发者,通常想要迅速学会如何实现各种常见的功能,然而又不太清楚最Z佳的实现方式是什么。Sau Sheong Chang写的这本书,针对这些问题给出了答案。这是一份研究Go语言标准库的优秀学习资料。”
——Jon Bodner,
Datadog公司的Staff工程师,
《Learning Go》一书的作者
|
內容簡介: |
本书涵盖以下内容:如何建立模块。如何调用另一个模块中的代码。如何返回出错情况,如何处理错误。如何将字符串转换成数字(或是将数字转换成字符串)。如何修改字符串中的多个字符。如何用字符串中的部分内容建立子串。如何捕获用户输入的字符串。其他的许多话题。
|
關於作者: |
Sau Sheong Chang是一位拥有28年经验的软件开发者,在各个领域使用多项技术制作软件产品。他是各种Java、Ruby与Go语言软件开发社群的活跃成员。他还组织过meetup,并在各种会议上面做过演讲。
|
目錄:
|
目录
前言 1
第1 章 入门级的技巧 .7
1.0 引言 7
1.1 安装Go 语言的开发环境 7
1.2 试用Go 语言 10
1.3 编写Hello World 程序 11
1.4 使用外部包 13
1.5 处理错误15
1.6 记录事件17
1.7 测试代码18
第2 章 与模块有关的技巧 .23
2.0 引言 .23
2.1 创建Go 模块 25
2.2 在模块中引入它所依赖的软件包 .26
2.3 从模块中移除不再依赖的软件包 .30
2.4 寻找第三方软件包的可用版本 32
2.5 引入模块所依赖的某个软件包的定版本 .33
2.6 保留某个依赖包的本地版本 35
2.7 依赖同一个包的多个版本 41
第3 章 与错误处理有关的技巧 45
3.0 引言 .45
3.1 处理错误47
3.2 简化重复的错误处理代码 49
3.3 创建自定义的错误 52
3.4 把原始的错误包装成另一种错误 .54
3.5 检视错误值 56
3.6 用panic 函数处理错误 58
3.7 从panic 之中恢复 .61
3.8 处理中断信号 .64
第4 章 与日志记录有关的技巧 67
4.0 引言 .67
4.1 将事件记入日志 67
4.2 对打印至标准logger 的日志内容做出修改 .71
4.3 把日志内容写到文件里面 73
4.4 将各种级别的日志分别记入相应的logger 74
4.5 通过操作系统的日志服务来记录事件 79
第5 章 与函数有关的技巧 .85
5.0 引言 .85
5.1 定义函数85
5.2 让同一个函数能够接受多种类型的数据 87
5.3 让函数接受数量可变的参数 90
5.4 让函数接受任意类型的参数 92
5.5 创建匿名函数 .96
5.6 创建一种在调用完之后能够保留状态的函数 .98
第6 章 与字符串有关的技巧 103
6.0 引言 103
6.1 创建字符串 103
6.2 在字符串与字节数组之间互相转换106
6.3 把多个字符串或其他类型的数据连成一个字符串 .106
6.4 把字符串转换成数值 111
6.5 把数值转换成字符串 114
6.6 替换某个字符串中的多个字符 117
6.7 从字符串中提取子串 120
6.8 判断某个字符串之中是否有另一个字符串 122
6.9 把字符串拆分成小字符串数组,或者把数组中的小字符串
合成一个字符串 123
6.10 删除字符串首尾的多余字符 126
6.11 把用户在命令行界面中输入的字符串捕获下来 128
6.12 对字符串做HTML 转义与HTML 反转义操作 131
6.13 使用正则表达式 133
第7 章 与通用I/O 有关的技巧 139
7.0 引言 139
7.1 从输入端读取数据 .140
7.2 向输出端写入数据 .141
7.3 将数据从Reader 复制到Writer 143
7.4 从文本文件中读取数据 147
7.5 向文本文件中写入数据 149
7.6 使用临时文件 151
第8 章 与CSV 有关的技巧 155
8.0 引言 155
8.1 读取整份CSV 文件 156
8.2 每次只从CSV 文件里面读取一行数据 157
8.3 把CSV 文件中的数据拆解成结构体 158
8.4 移除标题行 159
8.5 处理不用逗号做分隔符的CSV 文件 160
8.6 忽略CSV 文件中的某些行 161
8.7 向CSV 文件中写入数据 162
8.8 每次只向文件中写入一行数据 164
第9 章 与JSON 有关的技巧 . 165
9.0 引言 165
9.1 把JSON 数据解析成结构体 .165
9.2 解析非结构化的JSON 数据 .169
9.3 把JSON 数据流解析成结构体 174
9.4 根据结构体创建字节数组型的JSON 数据 182
9.5 根据结构体建立JSON 数据流 185
9.6 忽略结构体中的某些字段 .189
第10 章 与二进制数据有关的技巧 193
10.0 引言 193
10.1 将数据编码为gob 格式 194
10.2 将gob 格式的数据解码为结构体 196
10.3 把数据编码成自定义的二进制格式 199
10.4 从自定义的二进制格式中解码数据 203
第11 章 与日期和时间有关的技巧 207
11.0 引言 207
11.1 查询当前时间 208
11.2 用时间值做运算 208
11.3 表示日期 209
11.4 表示时区 210
11.5 表示时间段 .212
11.6 让程序暂停一段时间 .214
11.7 测量经过的时间 214
11.8 调整时间的显示格式 .219
11.9 把时间字符串解析成Time 结构体 .224
第12 章 与结构体有关的技巧 229
12.0 引言 229
12.1 定义结构体 .230
12.2 为结构体创建方法 233
12.3 创建并使用接口 236
12.4 创建结构体实例 239
12.5 创建只用一次的结构体 244
12.6 把其他结构体组合进来 247
12.7 给结构体字段定义元数据251
第13 章 与基本数据结构有关的技巧 255
13.0 引言 255
13.1 创建数组或切片 256
13.2 访问数组或切片 259
13.3 修改数组或切片 261
13.4 在并发环境下正确地使用数组或切片 266
13.5 给数组或切片中的元素排序 271
13.6 创建map 276
13.7 访问map 277
13.8 修改map 280
13.9 给map 排序 280
第14 章 与其他数据结构有关的技巧 283
14.0 引言 283
14.1 创建队列 284
14.2 创建栈 287
14.3 创建集 289
14.4 创建链表 295
14.5 创建堆 301
14.6 创建图 307
14.7 寻找图中的最短路径 .312
第15 章 与图像处理有关的技巧 319
15.0 引言 319
15.1 从文件中加载图像 321
15.2 将图像保存至文件 323
15.3 创建图像 324
15.4 将图像上下反转 325
15.5 对图像做灰阶处理 330
15.6 缩放图像 332
第16 章 与网络有关的技巧 335
16.0 引言 335
16.1 创建TCP 服务器 .337
16.2 创建TCP 客户端 .342
16.3 创建UDP 服务器.344
16.4 创建UDP 客户端.347
第17 章 与Web 开发有关的技巧 . 351
17.0 引言 351
17.1 建立一款简单的Web 应用程序 353
17.2 处理HTTP 请求 356
17.3 处理HTML 表单 .360
17.4 向Web 应用程序上传文件 .363
17.5 向客户端提供静态文件 365
17.6 建立提供JSON 数据的Web Service API 371
17.7 通过HTTPS 协议提供服务 374
17.8 使用Go 语言的模板引擎开发Web 应用程序 378
17.9 发出HTTP 客户端请求 384
第18 章 与功能测试有关的技巧 391
18.0 引言 391
18.1 让功能测试得以自动化 392
18.2 在同一个测试函数里面运行多个测试用例 394
18.3 在开始测试前与结束测试后分别执行setup 与teardown 逻辑 .396
18.4 建立子测试,以求更为精细地控制某一组测试用例.399
18.5 并行地运行测试 404
18.6 生成随机的输入数据,以便用这些数据做测试 411
18.7 计算测试覆盖率 419
18.8 测试Web 应用程序或Web 服务 423
第19 章 与性能测试有关的技巧 427
19.0 引言 427
19.1 让性能测试得以自动化 427
19.2 让功能测试不要随着性能测试一起执行 .430
19.3 把设置Test Fixture 所耗费的时间,从性能测试的结果中排除掉 .431
19.4 修改性能测试的运行时长或轮数 435
19.5 在同一个benchmark 函数里面运行多个性能测试用例 437
19.6 在性能测试的结果之间对比 439
19.7 给程序做Profiling(性能分析) .444
|
內容試閱:
|
前言Go 语言已经有十多年历史了。它是在2009 年公布的,1.0 版本发布于2012 年3 月。从2013 年开始,这门语言的流行度就在稳步上升,它经常出现在最流行的十编程语言榜单里面。过去十年出现了量有关Go 语言的书,其中也包括笔者在2015 年写的《Go Web Programming》。这门语言里面能够写的内容,基本上全都有人写过了,然而它毕竟在不断地演化,同时还有新一代的程序员正在加入Go 语言开发者的行列。这本书源自一次博客访谈。2021 年9 月正值疫情期间,Natalie Pistunovich 主持了一个叫作“Go Time”的访谈播客,其中有一期名为“Books that Teach Go”,在那一期里面,笔者的朋友Bill Kennedy 跟我一起,谈了与Go 语言有关的一些书。我提到了自己写的《Go Web Programming》以及当时刚建立的Go Recipes 博客(https://go-recipes.dev),这个博客向读者讲解如何用Go 语言实现各种基本的功能。我打算稳定地输出一些技术知识,让想要成为Go 语言开发者的人,以及有经验的Go 语言程序员,都能够从中受益。做完那期播客之后,Natalie 告诉我,O’Reilly 正找人写一本Go 语言的经典实例。而笔者自己,当时也恰好在编写Go 语言的技巧,所以我觉得,实在不应该错过这次命运的安排。Natalie 让我联系O’Reilly,结果自然不用说,就是现在家看到的这本书了(当然我在这里还是要说说其中的一些经过)。这本经典实例与其他一些同类书籍相似,都不是专门针对新的语言性或某个定话题来讲解的,而是要解释一些常见功能的实现原理。笔者会把Go 语言开发者最有可能遇到的问题,尽可能多地覆盖到。笔者注重的是涵盖常见问题,而不是涵盖所有问题。每一条技巧基本上都自成一体,笔者有时可能会在其中提到其他的技巧,但并不是说你必须先参考那些技巧,然后才能看懂当前这条。其中有些技巧可能显得乏味枯燥,但是没关系,书里还有许多功能类似的技巧供你选择。排版约定本书采用以下排版约定。斜体(Italic)表示新术语、URL、电子邮件地址、文件名和文件扩展名。等宽字体(Constant width)表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。粗体等宽字体(Constant width bold)表示应由用户原封不动输入的命令或其他文本。斜体等宽字体(Constant width italic)表示应该替换成用户提供值的文本,或者由上下文决定的值。使用范例代码本书的补充材料( 例如范例代码、习题等), 可以从https://github.com/sausheong/gocookbook 下载。如果有技术问题或是在使用范例代码时遇到困难,请发电子邮件至errata@oreilly.com.cn。本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可,销售或分发O’Reilly 图书的示例集则需要获得许可;引用本书中的示例代码回答问题无需获得许可,将书中量的代码放到你的产品文档中则需要获得许可。我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“Go Cookbook by Sau Sheong Chang (O’Reilly). Copyright 2023 Sau Sheong Chang, 978-1-098-12211-9”。如果你觉得你对代码的用法已经超出了合理使用的范围,或者不知道它是否属于刚才说的那几种需要征得同意的情况,欢迎你通过permissions@oreilly.com询问我们。O’Reilly 在线学习平台(O’Reilly Online Learning)近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南街2 号成铭厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司这本书在O’Reilly 网站上面有相应的网页,其中包含勘误表、范例代码,以及其他一些附加信息。这个页面的网址是:https://oreil.ly/go-cookbook。与我们的书籍和课程有关的新闻及信息,参见https://oreilly.com 网站。我们的LinkedIn:https://linkedin.com/company/oreilly-media。我们的Twitter:https://twitter.com/oreillymedia。我们的YouTube:https://youtube.com/oreillymedia。致谢笔者想要感谢妻子Angela Lim 与儿子Chang Kai Wen 容许并支持我“再写一本书”,感谢你们耐心地看着我在夜间或周末写书。家里有人是写书的,这感觉可不太好受,但他们(至少我认为他们)还是很好地接受了。笔者要感谢Natalie Pistunovich 介绍我认识O’Reilly 并帮我审阅本书草稿中的各章。还要感谢Jon Bodner 与Jess Males 给我以鼓励并向我提供意见与良好的建议,这对我有很的帮助。感谢SP Group、Temasek 与GovTech Singapore 的诸位前同事及现同事的支持与鼓励。这里恕不一一列出你们的名字,但我想你们都应该知道自己在这个名单里面,感谢你们始终支持我。作者离不开读者。我要感谢所有博客文章的读者,以及对我博客网站(https://sausheong.com)上面涉及Go 语言与其他技术的文章表示关注的人。家长久以来的支持给了我极动力,你们肯花时间读这些文章,我对此深表感激。谢谢家。最后,要感谢已故的父亲Chang Yoon Sang,他于去年十一月逝世。父亲总是毫无保留地强烈支持我做的每一件事。看到我也在写书,他尤其高兴(父亲是中医师与营养师,用中文撰写这两方面的书籍)。我知道自己的这些书他读起来稍显困难,因为他不是做技术的,但父亲还是以我为傲,我写的每一本书,包括译作,他都问我要去,他想把我的书摆满整个书架。我最的遗憾,就是他没有机会把现在的这本书也加进去。谨将本书献给我的父亲。
|
|