This commit is contained in:
Xargin 2016-08-10 23:15:55 +08:00
parent da5d8dda79
commit 32de28979e
3 changed files with 3 additions and 3 deletions

View File

@ -14,7 +14,7 @@ Unmarshal函数使用了反射机制类修改movie变量的每个成员根据
词法分析器lexer使用了标准库中的text/scanner包将输入流的字节数据解析为一个个类似注释、标识符、字符串面值和数字面值之类的标记。输入扫描器scanner的Scan方法将提前扫描和返回下一个记号对于rune类型。大多数记号比如“(”对应一个单一rune可表示的Unicode字符但是text/scanner也可以用小的负数表示记号标识符、字符串等由多个字符组成的记号。调用Scan方法将返回这些记号的类型接着调用TokenText方法将返回记号对应的文本内容。 词法分析器lexer使用了标准库中的text/scanner包将输入流的字节数据解析为一个个类似注释、标识符、字符串面值和数字面值之类的标记。输入扫描器scanner的Scan方法将提前扫描和返回下一个记号对于rune类型。大多数记号比如“(”对应一个单一rune可表示的Unicode字符但是text/scanner也可以用小的负数表示记号标识符、字符串等由多个字符组成的记号。调用Scan方法将返回这些记号的类型接着调用TokenText方法将返回记号对应的文本内容。
因为每个解析器可能需要多次使用当前的记号但是Scan会一直向前扫描我们包装了一个lexer扫描器辅助类型用于跟踪最近由Scan方法返回的记号。 因为每个解析器可能需要多次使用当前的记号但是Scan会一直向前扫描我们包装了一个lexer扫描器辅助类型用于跟踪最近由Scan方法返回的记号。
<u><i>gopl.io/ch12/sexpr</i></u> <u><i>gopl.io/ch12/sexpr</i></u>
```Go ```Go

View File

@ -123,7 +123,7 @@ func add(t *tree, value int) *tree {
结构体类型的零值是每个成员都是零值。通常会将零值作为最合理的默认值。例如对于bytes.Buffer类型结构体初始值就是一个随时可用的空缓存还有在第9章将会讲到的sync.Mutex的零值也是有效的未锁定状态。有时候这种零值可用的特性是自然获得的但是也有些类型需要一些额外的工作。 结构体类型的零值是每个成员都是零值。通常会将零值作为最合理的默认值。例如对于bytes.Buffer类型结构体初始值就是一个随时可用的空缓存还有在第9章将会讲到的sync.Mutex的零值也是有效的未锁定状态。有时候这种零值可用的特性是自然获得的但是也有些类型需要一些额外的工作。
如果结构体没有任何成员的话就是空结构体写作struct{}。它的大小为0也不包含任何信息但是有时候依然是有价值的。有些Go语言程序员用map带模拟set数据结构时用它来代替map中布尔类型的value只是强调key的重要性但是因为节约的空间有限而且语法比较复杂我们通常会避免这样的用法。 如果结构体没有任何成员的话就是空结构体写作struct{}。它的大小为0也不包含任何信息但是有时候依然是有价值的。有些Go语言程序员用map带模拟set数据结构时用它来代替map中布尔类型的value只是强调key的重要性但是因为节约的空间有限而且语法比较复杂我们通常会避免这样的用法。
```Go ```Go
seen := make(map[string]struct{}) // set of strings seen := make(map[string]struct{}) // set of strings

View File

@ -279,7 +279,7 @@ func parseAndCheck(s string) (eval.Expr, error) {
} }
``` ```
为了编写这个web应用我们需要做的就是下面这个plot函数这个函数有和http.HandlerFunc相似的签名 为了编写这个web应用我们需要做的就是下面这个plot函数这个函数有和http.HandlerFunc相似的签名
```go ```go
func plot(w http.ResponseWriter, r *http.Request) { func plot(w http.ResponseWriter, r *http.Request) {