Compare commits

..

14 Commits

Author SHA1 Message Date
chai2010
687fb92030 Revert "Update ch5-06.md" 2024-04-03 16:09:26 +08:00
chai2010
feac38bcf2 Merge pull request #213 from A-caibird/patch-1
Update ch5-06.md
2024-02-05 13:44:47 +08:00
Acaibrid
8df9c1211c Update ch5-06.md
返回的是一个函数,而不是返回的这个函数被调用后的返回值
2024-02-05 01:32:21 +08:00
chai2010
b8d7c32434 Merge pull request #210 from hanzhuoxian/master
第一章第二节 逻辑修正
2023-11-29 16:17:14 +08:00
chai2010
d35ce39441 Merge pull request #211 from yudianer/patch-1
Update ch3.md
2023-11-29 16:16:36 +08:00
Jack
b1b9274c8c Update ch3.md
“words” 应该指计算机里面的“字”,比如“一个字长”
2023-11-27 00:39:21 -06:00
韩卓贤
233eef7844 Merge branch 'gopl-zh:master' into master 2023-11-02 00:31:19 -05:00
hanzhuoxian
0bf3867967 变量形式描述逻辑修正 2023-11-02 13:30:40 +08:00
chai2010
c7f58f8991 Merge pull request #209 from hanzhuoxian/master
命令行参数 修正
2023-10-31 23:25:29 +08:00
hanjian
a9f4ae0bf7 命令行参数 修正 2023-10-31 20:50:14 +08:00
chai2010
bb175c69f5 Merge pull request #202 from liaosunny123/patch-2
Update ch7-01.md
2023-08-11 19:24:49 +08:00
chai2010
d948a26c96 Merge pull request #201 from liaosunny123/patch-1
Update ch1-05.md
2023-07-22 20:28:37 +08:00
EpicMo
213fe7cbaa Update ch7-01.md
修改句子
2023-07-22 15:11:55 +08:00
EpicMo
279919079a Update ch1-05.md 2023-07-20 10:20:08 +08:00
4 changed files with 7 additions and 8 deletions

View File

@@ -35,7 +35,7 @@ func main() {
`var` 声明定义了两个 `string` 类型的变量 `s``sep`。变量会在声明时直接初始化。如果变量没有显式初始化,则被隐式地赋予其类型的 *零值*zero value数值类型是 `0`,字符串类型是空字符串 `""`。这个例子里,声明把 `s``sep` 隐式地初始化成空字符串。第 2 章再来详细地讲解变量和声明。
对数值类型Go 语言提供了常规的数值和逻辑运算符。而对 `string` 类型,`+` 运算符连接字符串(译注:和 C++ 或者 JavaScript 是一样的)。所以表达式:`sep + os.Args[i]` 表示连接字符串 `sep``os.Args`。程序中使用的语句:`s+=sep+os.Args[i]` 是一条 *赋值语句*,将 `s` 的旧值跟 `sep``os.Args[i]` 连接后赋值回 `s`,等价于:`s=s+sep+os.Args[i]`
对数值类型Go 语言提供了常规的数值和逻辑运算符。而对 `string` 类型,`+` 运算符连接字符串(译注:和 C++ 或者 JavaScript 是一样的)。所以表达式:`sep + os.Args[i]` 表示连接字符串 `sep``os.Args[i]`。程序中使用的语句:`s+=sep+os.Args[i]` 是一条 *赋值语句*,将 `s` 的旧值跟 `sep``os.Args[i]` 连接后赋值回 `s`,等价于:`s=s+sep+os.Args[i]`
运算符 `+=` 是赋值运算符assignment operator每种数值运算符或逻辑运算符`+``*`,都有对应的赋值运算符。
@@ -113,7 +113,7 @@ var s = ""
var s string = ""
```
用哪种不用哪种,为什么呢?第一种形式,是一条短变量声明,最简洁,但只能用在函数内部,而不能用于包变量。第二种形式依赖于字符串的默认初始化零值机制,被初始化为 `""`。第三种形式用得很少,除非同时声明多个变量。第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的类型,否则使用隐式初始化。
用哪种不用哪种,为什么呢?第一种形式,是一条短变量声明,最简洁,但只能用在函数内部,而不能用于包变量。第二种形式依赖于字符串的默认初始化零值机制,被初始化为 `""`。第三种形式用得很少,除非同时声明多个变量。第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的,否则指定类型使用隐式初始化。
如前文所述,每次循环迭代字符串 `s` 的内容都会更新。`+=` 连接原字符串、空格和下个参数,产生新字符串,并把它赋值给 `s``s` 原来的内容已经不再使用,将在适当时机对它进行垃圾回收。

View File

@@ -23,7 +23,7 @@ func main() {
fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
os.Exit(1)
}
b, err := ioutil.ReadAll(resp.Body)
b, err := io.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
@@ -34,7 +34,7 @@ func main() {
}
```
这个程序从两个package中导入了函数net/http和io/ioutil包http.Get函数是创建HTTP请求的函数如果获取过程没有出错那么会在resp这个结构体中得到访问的请求结果。resp的Body字段包括一个可读的服务器响应流。ioutil.ReadAll函数从response中读取到全部内容将其结果保存在变量b中。resp.Body.Close关闭resp的Body流防止资源泄露Printf函数会将结果b写出到标准输出流中。
这个程序从两个package中导入了函数net/http和iohttp.Get函数是创建HTTP请求的函数如果获取过程没有出错那么会在resp这个结构体中得到访问的请求结果。resp的Body字段包括一个可读的服务器响应流。io.ReadAll函数从response中读取到全部内容将其结果保存在变量b中。resp.Body.Close关闭resp的Body流防止资源泄露Printf函数会将结果b写出到标准输出流中。
```
$ go build gopl.io/ch1/fetch

View File

@@ -1,5 +1,5 @@
# 第3章 基础数据类型
虽然从底层而言,所有的数据都是由比特组成,但计算机一般操作的是固定大小的如整数、浮点数、比特数组、内存地址等。进一步将这些数组织在一起就可表达更多的对象例如数据包、像素点、诗歌甚至其他任何对象。Go语言提供了丰富的数据组织形式这依赖于Go语言内置的数据类型。这些内置的数据类型兼顾了硬件的特性和表达复杂数据结构的便捷性。
虽然从底层而言,所有的数据都是由比特组成,但计算机一般操作的是固定大小的如整数、浮点数、比特数组、内存地址等。进一步将这些数组织在一起就可表达更多的对象例如数据包、像素点、诗歌甚至其他任何对象。Go语言提供了丰富的数据组织形式这依赖于Go语言内置的数据类型。这些内置的数据类型兼顾了硬件的特性和表达复杂数据结构的便捷性。
Go语言将数据类型分为四类基础类型、复合类型、引用类型和接口类型。本章介绍基础类型包括数字、字符串和布尔型。复合数据类型——数组§4.1和结构体§4.2——是通过组合简单类型来表达更加复杂的数据结构。引用类型包括指针§2.3.2、切片§4.2)、字典§4.3、函数§5、通道§8虽然数据种类很多但它们都是对程序中一个变量或状态的间接引用。这意味着对任一引用类型数据的修改都会影响所有该引用的拷贝。我们将在第7章介绍接口类型。

View File

@@ -20,10 +20,9 @@ func Sprintf(format string, args ...interface{}) string {
}
```
Fprintf的前缀F表示文件File也表明格式化输出结果应该被写入第一个参数提供的文件中。在Printf函数中的第一个参数os.Stdout是`*os.File`类型在Sprintf函数中的第一个参数&buf是一个指向可以写入字节的内存缓冲区然而它
并不是一个文件类型尽管它在某种意义上和文件类型相似。
Fprintf的前缀F表示文件File也表明格式化输出结果应该被写入第一个参数提供的文件中。在Printf函数中的第一个参数os.Stdout是`*os.File`类型在Sprintf函数中的第一个参数&buf是一个指向可以写入字节的内存缓冲区然而它并不是一个文件类型,尽管它在某种意义上和文件类型相似。
即使Fprintf函数中的第一个参数也不是一个文件类型。它是io.Writer类型这是一个接口类型定义如下
即使Fprintf函数中的第一个参数,它也不是一个文件类型。它是io.Writer类型这是一个接口类型定义如下
``` go
package io