diff --git a/README.md b/README.md index ee9afdd..ce405c8 100644 --- a/README.md +++ b/README.md @@ -42,4 +42,4 @@ Golang中国:[golang.tc](http://www.golang.tc/) ##开始阅读 [前言](./eBook/preface.md) -想读书的人,不会找不到目录 :) +想读书的人,不会找不到[目录](eBook/directory.md) :) diff --git a/eBook/04.6.md b/eBook/04.6.md index 5dec3ba..a97b819 100644 --- a/eBook/04.6.md +++ b/eBook/04.6.md @@ -1,20 +1,68 @@ -##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0 -要不等到 ***2013 年 6 月 11 日*** 再来看看吧~~ - -这里还有一些其它的学习资源噢~ - - - [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第10课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture10/lecture10.md) - - [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang) - -神马?你说你不想学习?那好吧,去逛逛看看行情也行~ - -- [Go Walker](http://gowalker.org) **Go 项目文档在线浏览工具** -- [Golang中文社区](http://bbs.mygolang.com/forum.php) -- [Go语言学习园地](http://studygolang.com/) -- [Golang中国](http://golang.tc) - #4.6 字符串 +字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。UTF-8 是被广泛使用的编码格式,是文本文件的标准编码,其它包括 XML 和 JSON 在内,也都使用该编码。由于该编码对占用字节长度的不定性,Go 中的字符串也可能根据需要占用 1 至 4 个字节(示例见第 4.6 节),这与其它语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。 +字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。 + +Go 支持以下 2 种形式的字面值: + +- 解释字符串: + + 该类字符串使用双引号括起来,其中的相关的转移字符将被替换,这些转移字符包括: + + - `\n`:换行符 + - `\r`:回车符 + - `\t`:tab 键 + - `\u` 或 `\U`:Unicode 字符 + - `\\`:反斜杠自身 + +- 非解释字符串: + + 该类字符串使用反引号括起来,支持换行,例如: + + `This is a raw string \n` 中的 `\n\` 会被原样输出。 + +和 C/C++ 一样,Go 中的字符串是根据长度限定,而非特殊字符。 + +`string` 类型的零值为长度为零的字符串,即空字符串 `""`。 + +一般的比较运算符(`==`、`!=`、`<`、`<=`、`>=`、`>`)通过在内存中按字节比较来实现字符串的对比。你可以通过函数 `len()` 来获取字符串所占的字节长度,例如:`len(str)`。 + +字符串的内容(纯字节)可以通过标准索引法来获取,在中括号 `[]` 内写入索引,索引从 0 开始计数。 + + 字符串 str 的第 1 个字节: str[0] + 第 i 个字节: str[i] + 最后 1 个字节: str[len(str)-1] + +需要注意的是,这种转换方案只对纯 ASCII 码的字符串有效。 + +**注意事项** 获取字符串中某个字节的地址的行为是非法的,例如:`&str[i]`。 + +**字符串拼接符 `+`** + +两个字符串 `s1` 和 `s2` 可以通过 `s := s1 + s2` 拼接在一起。 + +`s2` 追加在 `s1` 尾部并生成一个新的字符串 `s`。 + +你可以通过以下方式来对代码中多行的字符串进行拼接: + + str := “Beginning of the string “+ + “second part of the string” + +由于编译器行尾自动补全分号的缘故,加号 `+` 必须放在第一行。 + +拼接的简写形式 `+=` 也可以用于字符串: + + s := “hel” + “lo,” + s += “world!” + fmt.Println(s) //输出 “hello, world!” + +在循环中使用加号 `+` 拼接字符串并不是最高效的做法,更好的办法是使用函数 `strings.Join()`(第 4.7.10 节),有没有更好地办法了?有!使用字节缓冲(`bytes.Buffer`)拼接更加给力(第 7.2.6 节)! + +在第 7 章,我们会讲到通过将字符串看作是字节(byte)的切片(slice)来实现对其标准索引法的操作。会在第 5.4.1 节中讲到的 for 循环只会根据索引返回字符串中的纯字节,而在第 5.4.4 节(以及第 7.6.1 节的示例)将会展示如何使用 for-range 循环来实现对 Unicode 字符串的迭代操作。在下一节,我们会学习到许多有关字符串操作的函数和方法,同时 `fmt` 包中的 `fmt.Sprint(x)` 也可以格式化生成并返回你所需要的字符串(第 4.4.3 节)。 + +**练习 4.6** [count_characters.go](exercises/chapter_4/count_characters.go) + +创建一个用于统计字节和字符(rune)的程序,并对字符串 `asSASA ddd dsjkdsjs dk` 进行分析,然后再分析 `asSASA ddd dsjkdsjsこん dk`,最后解释两者不同的原因(提示:使用 `unicode/utf8` 包)。 ##链接 - [目录](directory.md) diff --git a/eBook/04.7.md b/eBook/04.7.md new file mode 100644 index 0000000..99e009f --- /dev/null +++ b/eBook/04.7.md @@ -0,0 +1,22 @@ +##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0 +要不等到 ***2013 年 6 月 12 日*** 再来看看吧~~ + +这里还有一些其它的学习资源噢~ + + - [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第10课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture10/lecture10.md) + - [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang) + +神马?你说你不想学习?那好吧,去逛逛看看行情也行~ + +- [Go Walker](http://gowalker.org) **Go 项目文档在线浏览工具** +- [Golang中文社区](http://bbs.mygolang.com/forum.php) +- [Go语言学习园地](http://studygolang.com/) +- [Golang中国](http://golang.tc) + +#strings 和 strconv 包 + + +##链接 +- [目录](directory.md) +- 上一节:[字符串](04.6.md) +- 下一节:[时间和日期](04.8.md) \ No newline at end of file