mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 06:36:43 +08:00
modified: eBook/18.1.md
modified: eBook/18.10.md modified: eBook/18.11.md modified: eBook/18.2.md modified: eBook/18.3.md modified: eBook/18.4.md modified: eBook/18.5.md modified: eBook/18.6.md modified: eBook/18.7.md modified: eBook/18.8.md modified: eBook/18.9.md
This commit is contained in:
@@ -34,9 +34,7 @@ for ix, ch := range str {
|
||||
|
||||
最快速:
|
||||
|
||||
`utf8.RuneCountInString(str)`
|
||||
|
||||
`len([]int(str)) //TBD`
|
||||
`utf8.RuneCountInString(str)`
|
||||
|
||||
(5)如何连接字符串:
|
||||
|
||||
@@ -55,7 +53,7 @@ for ix, ch := range str {
|
||||
|
||||
(6)如何解析命令行参数:使用`os`或者`flag`包
|
||||
|
||||
(参考[例12.4](examples/chapter_12/fileinput.go))
|
||||
(参考[例12.4](examples/chapter_12/fileinput.go))
|
||||
|
||||
## 链接
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# 18.10 其他
|
||||
|
||||
如何在程序出错时停止:
|
||||
如何在程序出错时终止程序:
|
||||
|
||||
```go
|
||||
if err != nil {
|
||||
@@ -19,5 +19,5 @@ panic(“ERROR occurred: “ + err.Error())
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[网络和网页应用](18.9.md)
|
||||
- 下一节:[出于性能考虑的最佳实践和建议](18.11.md)
|
@@ -6,11 +6,11 @@
|
||||
|
||||
(3)尽可能的使用切片代替数组;
|
||||
|
||||
(4)尽可能的使用数组和切片代替映射(详见 参考文献15);
|
||||
(4)尽可能的使用数组和切片代替映射(详见参考文献15);
|
||||
|
||||
(5)如果只想获取切片中某项值,不需要值的索引,尽可能的使用`for range`去遍历切片,这比必须去查询切片中的每个元素要快一些;
|
||||
|
||||
(6)当数组元素是稀疏的(例如有很多0值或者空值),使用映射会降低内存消耗;
|
||||
(6)当数组元素是稀疏的(例如有很多`0`值或者空值),使用映射会降低内存消耗;
|
||||
|
||||
(7)初始化映射时指定其容量;
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
(10)尽可能在需要分配大量内存时使用缓存;
|
||||
|
||||
(11)使用缓存模板(参考15.7小节)。
|
||||
(11)使用缓存模板(参考[章节15.7](15.7.md))。
|
||||
|
||||
|
||||
## 链接
|
||||
|
@@ -44,5 +44,5 @@ Found: for row := range arr2Dim {
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一节:[字符串](18.1.md)
|
||||
- 下一节:[映射](18.3.md)
|
@@ -2,7 +2,7 @@
|
||||
|
||||
创建: `map1 := make(map[keytype]valuetype)`
|
||||
|
||||
初始化: `map1 := map[string]int{"one": 1, "two": 2}`
|
||||
初始化: `map1 := map[string]int{"one": 1, "two": 2}`
|
||||
|
||||
(1)如何使用`for`或者`for-range`遍历一个映射:
|
||||
|
||||
@@ -25,5 +25,5 @@ for key, value := range map1 {
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[数组和切片](18.2.md)
|
||||
- 下一节:[结构体](18.4.md)
|
@@ -16,7 +16,7 @@ ms := &struct1{10, 15.5, "Chris"}
|
||||
```
|
||||
|
||||
当结构体的命名以大写字母开头时,该结构体在包外可见。
|
||||
通常情况下,为每个结构体定义一个构建函数,并推荐使用构建函数初始化结构体(参考例10.2):
|
||||
通常情况下,为每个结构体定义一个构建函数,并推荐使用构建函数初始化结构体(参考[例10.2](examples/chapter_10/person.go)):
|
||||
|
||||
```go
|
||||
ms := Newstruct1{10, 15.5, "Chris"}
|
||||
@@ -28,5 +28,5 @@ func Newstruct1(n int, f float32, name string) *struct1 {
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[映射](18.3.md)
|
||||
- 下一节:[接口](18.5.md)
|
@@ -34,5 +34,5 @@ func classifier(items ...interface{}) {
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[结构体](18.4.md)
|
||||
- 下一节:[函数](18.6.md)
|
@@ -1,6 +1,6 @@
|
||||
# 18.6 函数
|
||||
|
||||
如何使用内建函数`recover`停止`panic`过程(参考13.3小节):
|
||||
如何使用内建函数`recover`停止`panic`过程(参考[章节13.3](13.3.md)):
|
||||
|
||||
```go
|
||||
func protect(g func()) {
|
||||
@@ -19,5 +19,5 @@ func protect(g func()) {
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[接口](18.5.md)
|
||||
- 下一节:[文件](18.7.md)
|
@@ -48,5 +48,5 @@ func cat(f *file.File) {
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[函数](18.6.md)
|
||||
- 下一节:[协程(goroutine)与通道(channel)](18.8.md)
|
@@ -69,9 +69,9 @@ func pump() chan int {
|
||||
|
||||
(5)通道迭代器模板:
|
||||
|
||||
(6)如何限制并发处理请求的数量:参考14.11小节
|
||||
(6)如何限制并发处理请求的数量:参考[章节14.11](14.11.md)
|
||||
|
||||
(7)如何在多核CPU上实现并行计算:参考14.13小节
|
||||
(7)如何在多核CPU上实现并行计算:参考[章节14.13](14.13.md)
|
||||
|
||||
(8)如何停止一个协程:`runtime.Goexit()`
|
||||
|
||||
@@ -103,14 +103,14 @@ func Worker(in, out chan *Task) {
|
||||
}
|
||||
```
|
||||
|
||||
(11)如何在同步调用运行时间过长时将之丢弃:参考14.5小节 第二个变体
|
||||
(11)如何在同步调用运行时间过长时将之丢弃:参考[章节14.5](14.5.md) 第二个变体
|
||||
|
||||
(12)如何在通道中使用计时器和定时器:参考14.5小节
|
||||
(12)如何在通道中使用计时器和定时器:参考[章节14.5](14.5.md)
|
||||
|
||||
(13)典型的服务器后端模型:参考14.4小节
|
||||
(13)典型的服务器后端模型:参考[章节14.4](14.4.md)
|
||||
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[文件](18.7.md)
|
||||
- 下一节:[网络和网页应用](18.9.md)
|
@@ -12,10 +12,10 @@ var strTempl = template.Must(template.New(“TName”).Parse(strTemplateHTML))
|
||||
|
||||
`{{html .}}` 或者通过一个字段 `FieldName {{ .FieldName |html }}`
|
||||
|
||||
使用缓存模板(参考15.7小节)
|
||||
使用缓存模板(参考[章节15.7](15.7.md))
|
||||
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[运算符模板和接口](17.4.md)
|
||||
- 下一节:[字符串](18.1.md)
|
||||
- 上一章:[协程(goroutine)与通道(channel)](18.8.md)
|
||||
- 下一节:[其他](18.10.md)
|
Reference in New Issue
Block a user