180 lines
6.1 KiB
Markdown
180 lines
6.1 KiB
Markdown
# 第二章: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. **运算符**:算术、比较、逻辑、位运算。
|
||
>
|
||
> **🚀 下一步预告:**
|
||
> 学会了基础语法,我们就能写一些简单的程序了!但现实世界的数据往往更复杂:比如一个学生有姓名、年龄、成绩……这时候,我们需要**数据结构**(数组、切片、映射、结构体)来组织这些数据。
|
||
>
|
||
> **下一章,我们就来认识这些强大的“数据容器”!** 准备好了吗?
|