外观
练习 — Variables and Types
对应知识点:
variable·constant·basic types对应文档:docs/phase-01-fundamentals/variable-and-types.md代码目录:workspace/phase-01/variables/
前置条件:完成 Go 环境练习,能正常使用 go run。
Level 1 — 基础
练习 1.1 · 声明 AGV 变量
新建 workspace/phase-01/variables/ex01_agv.go(package main,不要写 func main,与 main.go 同包)。
在 main.go 的 main() 中调用一个函数 printAGVInfo(),该函数声明并打印:
| 变量 | 类型 | 值 |
|---|---|---|
| deviceID | string | "AGV-002" |
| speed | float64 | 0.8 |
| isOnline | bool | true |
要求:
- deviceID 用
var完整声明 - speed 和 isOnline 用
:=短声明 - 使用
fmt.Println打印三个变量
练习 1.2 · 短声明与类型
在 main.go 或新文件中,使用 := 声明三个变量:
go
name := "sensor-01"
level := 3
active := true要求:
- 打印每个变量的值和类型
- 使用
fmt.Printf("name=%v, type=%T\n", name, name)格式 - 确认
level的类型是int,active的类型是bool
练习 1.3 · 零值
声明以下变量但不赋初值,打印它们的零值:
go
var count int
var ratio float64
var label string
var online bool要求:
- 理解并验证:int→0, float64→0.0, string→"", bool→false
- 在输出中标注每个零值
练习 1.4 · 常量
定义以下常量并打印:
go
const maxSpeed = 2.0
const warehouseName = "Warehouse-A"要求:
- 尝试在常量定义后写
maxSpeed = 3.0,观察编译错误 - 理解
const不可重新赋值
Level 2 — 应用
练习 2.1 · 计算距离
新建 workspace/phase-01/variables/ex02_distance.go。
要求:
- 定义常量:
warehouseWidth = 100.0,warehouseHeight = 50.0 - 声明变量:
agvX = 30.0,agvY = 10.0 - 计算 AGV 到仓库中心
(width/2, height/2)的直线距离 - 使用
math.Sqrt和math.Pow(import"math") - 打印结果,保留 2 位小数(提示:
fmt.Printf("%.2f", dist))
练习 2.2 · 电量告警
要求:
- 声明
battery int = 15 - 定义常量
lowBatteryThreshold = 20 - 如果
battery < lowBatteryThreshold,打印"low battery warning" - 否则打印
"battery ok" - 分别测试
battery = 15和battery = 80两种情况
练习 2.3 · 类型转换
要求:
- 声明
distance int = 150,duration float64 = 12.5 - 计算平均速度:
float64(distance) / duration - 打印结果,保留 2 位小数
- 不要写成
distance / duration(思考为什么编译失败)
练习 2.4 · byte 与 rune
要求:
- 声明
var letter byte = 'A'并打印 - 声明
var ch rune = '中'并打印 - 尝试
var bad byte = '中',记录编译错误信息 - 理解 byte(uint8)和 rune(int32)的区别
Level 3 — 综合
练习 3.1 · 三台 AGV 信息
不使用 array/slice(当前未学),用独立变量模拟 3 台 AGV:
| AGV | ID | X | Y | Speed |
|---|---|---|---|---|
| 1 | AGV-001 | 10.0 | 5.0 | 1.2 |
| 2 | AGV-002 | 30.0 | 15.0 | 0.8 |
| 3 | AGV-003 | 0.0 | 0.0 | 0.0 |
要求:
- 打印每台 AGV 的完整信息
- 计算每台到原点
(0, 0)的距离并打印 - 使用常量
maxSpeed = 2.0,标注每台是否超速
练习 3.2 · 设备状态
要求:
- 用 const 定义状态:
StatusIdle、StatusMoving、StatusError(string 类型) - 声明变量
currentStatus = StatusMoving,agvID = "AGV-001",speed = 1.2 - 打印格式:
AGV-001 is moving at 1.2 m/s - 分别测试 Idle 和 Error 状态的输出格式
Level 4 — 项目实践
练习 4.1 · AGV 状态快照
新建 workspace/phase-01/variables/agv_status.go,package main,包含 func main()。
模拟数字孪生 AGV 状态快照,打印完整报告:
变量:
- ID、positionX、positionY、speed、battery、isOnline
常量:
- maxSpeed = 2.0
- lowBatteryThreshold = 20
- warehouseWidth = 100.0
- warehouseHeight = 50.0
报告内容:
=== AGV Status Report ===
ID: AGV-001
Position: (30.0, 10.0)
Speed: 2.5 m/s
Battery: 15%
Online: true
--- Alerts ---
Overspeed: YES
Low Battery: YES
In Bounds: YES
=========================要求:
- 超速判断:
speed > maxSpeed - 低电量判断:
battery < lowBatteryThreshold - 边界判断:X 在
[0, warehouseWidth],Y 在[0, warehouseHeight] go run agv_status.go可独立运行
学习检查
完成 Level 1 后,确认能回答:
- [ ]
var、:=、const分别在什么场景使用? - [ ] Go 零值与 JS
undefined有何不同? - [ ] 为什么 int 不能直接赋给 float64?
- [ ]
:=能在函数外使用吗?
提交方式
完成后说:
检查答案 — Variables 练习 X.X并附上你的代码。