|
|
@@ -0,0 +1,55 @@
|
|
|
+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)
|
|
|
+}
|