package main import "fmt" func main() { // 1. 显式声明:var 变量名 类型 = 初始值。 var name string = "小朱" var age int = 18 var learning bool = true fmt.Println("=== 个人资料 ===") fmt.Printf("姓名:%s,年龄:%d,正在学习 Go:%t\n", name, age, learning) // 2. 类型推断:省略类型,由初始值推断。这里 city 的类型是 string。 var city = "上海" fmt.Printf("城市:%s,类型:%T\n", city, city) // 3. 短变量声明 := 只能在函数内部使用。 // 已经声明的变量,修改值时使用 =,而不是再次使用 :=。 lesson := 2 age = 19 fmt.Printf("当前是第 %d 课,修改后的年龄:%d\n", lesson, age) // 同一作用域内,:= 左侧至少需要一个新变量。 // age 已存在,但 score 是新变量,所以这一行可以编译。 age, score := 20, 95 fmt.Printf("再次修改后的年龄:%d,分数:%d\n", age, score) // 4. 常量:声明后不能重新赋值。 const courseName = "Go 语言基础" fmt.Printf("课程:%s\n", courseName) // 5. 零值:变量没有显式初始化时,会自动获得对应类型的零值。 var count int var price float64 var message string var finished bool fmt.Println("\n=== 零值 ===") // %q 为字符串加上引号,方便看出空字符串。 fmt.Printf("int:%d,float64:%.1f,string:%q,bool:%t\n", count, price, message, finished) // 6. 类型转换:int 和 float64 不能直接相乘,需要显式转换。 quantity := 3 unitPrice := 2.5 total := float64(quantity) * unitPrice fmt.Println("\n=== 购物计算 ===") fmt.Printf("数量:%d,单价:%.2f,总价:%.2f\n", quantity, unitPrice, total) fmt.Printf("数量类型:%T,单价类型:%T,总价类型:%T\n", quantity, unitPrice, total) // 7. 浮点数转整数会向零截断,不会四舍五入,也不会修改原变量。 whole := int(total) fmt.Printf("总价转为整数:%d,原总价仍为:%.2f\n", whole, total) }