Skip to content

练习 — 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.gopackage main,不要写 func main,与 main.go 同包)。

main.gomain() 中调用一个函数 printAGVInfo(),该函数声明并打印:

变量类型
deviceIDstring"AGV-002"
speedfloat640.8
isOnlinebooltrue

要求

  • 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 的类型是 intactive 的类型是 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.0warehouseHeight = 50.0
  • 声明变量:agvX = 30.0agvY = 10.0
  • 计算 AGV 到仓库中心 (width/2, height/2) 的直线距离
  • 使用 math.Sqrtmath.Pow(import "math"
  • 打印结果,保留 2 位小数(提示:fmt.Printf("%.2f", dist)

练习 2.2 · 电量告警

要求

  • 声明 battery int = 15
  • 定义常量 lowBatteryThreshold = 20
  • 如果 battery < lowBatteryThreshold,打印 "low battery warning"
  • 否则打印 "battery ok"
  • 分别测试 battery = 15battery = 80 两种情况

练习 2.3 · 类型转换

要求

  • 声明 distance int = 150duration 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:

AGVIDXYSpeed
1AGV-00110.05.01.2
2AGV-00230.015.00.8
3AGV-0030.00.00.0

要求

  • 打印每台 AGV 的完整信息
  • 计算每台到原点 (0, 0) 的距离并打印
  • 使用常量 maxSpeed = 2.0,标注每台是否超速

练习 3.2 · 设备状态

要求

  • 用 const 定义状态:StatusIdleStatusMovingStatusError(string 类型)
  • 声明变量 currentStatus = StatusMovingagvID = "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.gopackage 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

并附上你的代码。


学习导航

上一篇:package · 对应知识文档 · 下一篇:array 与 slice