go 语言圣经练习解答 -- 第三章
go语言圣经(The Go Programming Language)第三章练习题答案
前言
go语言圣经是一本go入门非常不错的书籍,翻译至The Go Programming Language,本文记录该书章节后练习题答案
- 中文pdf获取地址1 中文pdf获取地址2
- 英文原版获取地址
- 中文实体书获取地址 (一个还不赖的盗版书网站)
- 本文从第三章练习3.10开始,前面的请查看移步我的CSDN
练习 3.10: 编写一个非递归版本的comma函数,使用bytes.Buffer代替字符串链接操作。
解题思路:
- 参考书中的comma函数,即实现基本的为数字添加逗号分隔符
- 确定了第一个逗号位置后,每隔三个数字添加一个逗号,最后末尾会多出来一个逗号,去掉即可
- 使用bytes.Buffe而非”+”
1 | func comma(s string) string { |
练习 3.12: 编写一个函数,判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但是对应不同的顺序。
解题思路:
- 拥有相同字符那么他们长度肯定是相同的
- 每个字符都有自己的Unicode码,记录每个字符串中每个字符出现的次数
- 循环记录的数组,对比个数是否相同
1 | func isReverse(a, b string) bool { |
练习 3.13: 编写KB、MB的常量声明,然后扩展到YB。
1.简单粗暴法(没有解题思路)
1 | const ( |
2.结合书中例子定义KiB到YiB解决
1 | KiB = 1024, KB = 1000 |
- KiB减去24就是KB
- MIB减去48576就是MB
- …感觉第一种更加简单粗暴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21const (
_ = 1 << (10 * iota)
KiB // 1024
MiB // 1048576
GiB // 1073741824
TiB // 1099511627776 (exceeds 1 << 32)
PiB // 1125899906842624
EiB // 1152921504606846976
ZiB // 1180591620717411303424 (exceeds 1 << 64)
YiB // 1208925819614629174706176
)
const (
KB = 1000
MB = MiB - MiB % (KB * KB)
GB = GiB - GiB % (MB * KB)
TB = TiB - TiB % (GB * KB)
PB = PiB - PiB % (TB * KB)
EB = EiB - EiB % (PB * KB)
ZB = ZiB - ZiB % (EB * KB)
YB = YiB - YiB % (ZB * KB)
)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 墨殇的技术博客!
评论
GitalkValine