以下是第二周Go语言基础语法的详细教程,包含变量声明、基本类型操作和温度转换任务的完整实现指南:
第二周:基础语法与温度转换程序
一、变量声明
1. var关键字声明
// 标准声明格式(类型在变量名后)
var 变量名 类型 = 值// 示例:
var age int = 25 // 显式指定类型
var name = "Alice" // 类型推断(自动推导为string)
var isStudent bool // 未赋值时使用零值(bool零值为false)
2. 短声明(:=)
// 只能在函数内部使用
变量名 := 值// 示例:
temperature := 36.5 // 自动推导为float64
city := "Beijing" // string类型
3. 两种方式对比
声明方式 | 使用场景 | 示例 |
---|---|---|
var | 包级变量/需要显示指定类型 | var count int = 10 |
:= | 函数内部局部变量 | name := "Bob" |
二、基本数据类型
1. 数值类型
- int:整型(自动选择系统位数)
- float64:双精度浮点型(推荐使用)
- 其他:int8/uint16/float32等(需要特定精度时使用)
2. 字符串类型
var message string = "Hello, 世界" // UTF-8编码
str := `多行
原始字符串` // 反引号定义多行字符串
3. 布尔类型
var isActive bool = true // 只能为true/false
isValid := (10 > 5) // 通过表达式赋值
4. 零值特性
类型 | 零值 |
---|---|
数值 | 0 |
字符串 | “” |
布尔 | false |
三、示例代码
package mainimport "fmt"// 包级变量声明
var version string = "1.0"func main() {// 短声明示例name := "Gopher"age := 3// var声明示例var isRobot boolvar weight float64 = 12.5fmt.Printf("Name: %s, Age: %d\n", name, age)fmt.Println("Is robot:", isRobot) // 输出零值fmt.Printf("Weight: %.1fkg\n", weight)
}
四、任务:温度转换程序
要求
- 从命令行输入摄氏温度(如:36.5)
- 使用公式转换为华氏温度:
℉ = ℃×1.8 +32
- 输出转换结果(保留1位小数)
- 代码需同时演示var和:=两种声明方式
分步教程
- 创建项目目录
mkdir temp-converter
cd temp-converter
go mod init tempconverter
- 编写代码(main.go)
package mainimport ("fmt"
)func main() {// 使用var声明变量var celsius float64// 获取用户输入fmt.Print("请输入摄氏温度(℃):")fmt.Scanln(&celsius) // 注意取地址符&// 使用短声明转换温度fahrenheit := celsius*1.8 + 32// 输出结果(保留1位小数)fmt.Printf("转换结果:%.1f℉\n", fahrenheit)
}
- 运行程序
go run main.go
# 输入示例:36.5
# 预期输出:转换结果:97.7℉
五、常见问题解决
-
报错:non-integer value
确保使用float64
类型,输入时不要包含非数字字符 -
Scanln无法读取输入
检查是否添加取地址符&celsius
-
精度丢失问题
计算时至少有一个操作数是浮点类型:// 错误示例(整数计算) 5/9 = 0 // 正确写法 5.0/9.0 = 0.555...
-
变量未使用错误
Go编译器不允许存在未使用的变量
学习成果检查
- 能正确声明包级变量和局部变量
- 理解float64和int的区别
- 程序能正确处理小数输入
- 输出结果保留1位小数
- 代码中包含两种变量声明方式
扩展练习:
尝试添加华氏转摄氏功能,使用flag包实现命令行参数输入(示例命令:-t 98.6 -scale F
)
完成本练习后,你将掌握Go的变量操作和基础类型转换,为后续流程控制学习打下基础。