Files
test/chapters/chapter-2-revised.md

180 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第二章Go 基础语法 —— 像搭积木一样写代码
> **👋 回顾一下:**
>
> 上节我们成功安装了 Go还写出了第一个 `Hello, World!` 程序。是不是觉得“原来编程也没那么难”?
>
> **🤔 但是,光会打印一句话可不够哦!**
> 真正的编程,是要处理数据、做判断、循环操作……就像搭积木,我们需要先认识各种“积木块”(变量、类型),然后学习怎么把它们拼在一起(流程控制)。
>
> **🎯 这一章,我们要掌握三样东西:**
> 1. **变量**:给数据起名字,存起来。
> 2. **类型**:知道数据是什么“材质”的(整数?字符串?)。
> 3. **流程控制**:让程序学会“如果……就……"和“循环……"。
>
> **别担心,我会用大量的例子,让你边学边练!**
---
## 2.1 变量声明 —— 给数据找个“家”
> **💡 想象一下:**
> 你在整理房间,需要给不同的物品贴上标签,比如“书”、“衣服”、“鞋子”。在编程中,**变量**就是这些标签,用来**存储数据**。
### 📝 Go 的四种声明方式
#### 1. `var` 声明(最正式)
```go
var name string = "Alice"
var age int = 25
```
* **老师点评**:这是最规范的写法,适合在函数外面声明全局变量。
#### 2. `var` 声明(类型推断)
```go
var name = "Bob" // Go 自动推断 name 是 string 类型
```
* **老师点评**更简洁只要给了初始值Go 就知道它是什么类型了。
#### 3. 短声明 `:=`(最常用!)
```go
name := "Charlie"
age := 30
```
* **老师点评****这是 Go 程序员最爱用的写法!** 既简洁又清晰。记住,只能在函数里面用哦!
#### 4. 多变量声明
```go
x, y, z := 1, 2, 3
```
* **老师点评**:一次声明多个变量,效率更高!
> **⚠️ 老师的小提醒:**
> * 变量名要**有意义**(比如用 `userName` 而不是 `a`)。
> * Go 是**大小写敏感**的(`Name` 和 `name` 是两个不同的变量)。
> * **未使用的变量**会让编译器报错(这是 Go 的“强迫症”,但能帮你避免很多 bug
> **🎮 动手练一练:**
> 试着声明几个变量,存储你的姓名、年龄、身高,并打印出来!
---
## 2.2 数据类型 —— 认识各种“积木块”
> **🧱 常见的数据类型:**
>
> * **整数**`int`, `int8`, `int16`, `int32`, `int64`……(用来存数字)
> * **无符号整数**`uint`, `uint8`, `uint16`, `uint32`, `uint64`……(只存正数,范围更大)
> * **浮点数**`float32`, `float64`……(用来存小数,比如 3.14
> * **字符串**`string`(用来存文字,比如 "Hello"
> * **布尔值**`bool`(只有 `true` 和 `false` 两个值)
> * **字节**`byte``uint8` 的别名,用来处理二进制数据)
> * **字符**`rune``int32` 的别名,用来处理 Unicode 字符,比如中文)
> **💡 老师的小技巧:**
> * 如果不确定用哪种整数,直接用 `int` 就行(它会根据系统自动选择最合适的)。
> * 字符串在 Go 中是**不可变**的(不能修改里面的字符),如果需要修改,可以用 `[]rune` 转换。
> * 浮点数比较时,**不要直接用 `==`**(因为精度问题),可以用 `math.Abs(a-b) < 0.00001` 来判断是否“近似相等”。
> * `byte` 常用于处理文件、网络数据;`rune` 常用于处理中文、emoji 等多字节字符。
> **🎮 动手练一练:**
> 试着声明几个不同类型的变量,并打印它们的类型(用 `%T` 格式化符)。
---
## 2.3 流程控制 —— 让程序“动”起来
> **🤔 如果……就……**
>
> 生活中充满了判断:
> * 如果**下雨**,就**带伞**。
> * 如果**分数>=90**,就**得 A**。
>
> 在 Go 中,我们用 `if-else` 来实现:
```go
score := 85
if score >= 90 {
fmt.Println("优秀!")
} else if score >= 80 {
fmt.Println("良好!")
} else {
fmt.Println("继续努力!")
}
```
> **🔄 循环……循环……**
>
> 如果想重复做一件事,比如打印 1 到 100怎么办
>
> Go 只有 `for` 循环,但功能强大:
```go
// 传统 for 循环
for i := 1; i <= 10; i++ {
fmt.Println(i)
}
// while 风格(省略初始化)
i := 0
for i < 10 {
fmt.Println(i)
i++
}
// 无限循环(记得用 break 退出!)
for {
// ...
break
}
```
> **🎯 老师的小总结:**
> * `if-else` 用来做**判断**。
> * `for` 用来做**循环**。
> * Go 没有 `while` 和 `do-while`,但 `for` 可以搞定一切!
> **🎮 动手练一练:**
> 写一个程序,打印 1 到 100 之间所有的**偶数**
---
## 2.4 运算符 —— 让数据“动起来”
> **🧮 常见的运算符:**
>
> * **算术**`+`, `-`, `*`, `/`, `%`(取余)
> * **比较**`==`, `!=`, `>`, `<`, `>=`, `<=`
> * **逻辑**`&&`(与), `||`(或), `!`(非)
> * **位运算**`&`, `|`, `^`, `<<`, `>>`(进阶内容,暂时了解即可)
> **💡 老师的小提醒:**
> * 整数除法会**截断小数部分**`5/2 = 2`),如果需要小数,用浮点数(`5.0/2.0 = 2.5`)。
> * 逻辑运算符支持**短路求值**`false && 复杂计算()` 不会执行复杂计算)。
> **🎮 动手练一练:**
> 写一个程序,判断一个年份是否是**闰年**(能被 4 整除但不能被 100 整除,或者能被 400 整除)。
---
## 2.5 本章小结
> **🎯 我们学到了什么?**
> 1. **变量声明**`var`、短声明 `:=`、多变量声明。
> 2. **数据类型**:整数、浮点数、字符串、布尔值、字节、字符。
> 3. **流程控制**`if-else` 判断、`for` 循环。
> 4. **运算符**:算术、比较、逻辑、位运算。
>
> **🚀 下一步预告:**
> 学会了基础语法,我们就能写一些简单的程序了!但现实世界的数据往往更复杂:比如一个学生有姓名、年龄、成绩……这时候,我们需要**数据结构**(数组、切片、映射、结构体)来组织这些数据。
>
> **下一章,我们就来认识这些强大的“数据容器”!** 准备好了吗?