第七回:Go 语言变量

华府名册的秘密(变量声明与赋值)
唐伯虎
唐伯虎: 9527,你知道为什么秋香不理你吗?因为你只有一个代号!做人要有名字,写代码也是一样,数据要有名字,这就叫变量 (Variable)。在华府混,得先在“花名册”上占个坑。

🏷️ 华府三招 (变量声明)

在 Go 语言里,给数据起名字(声明变量)主要有三种招式,招招致命。

第一招:正规拜师 (Standard Declaration)

使用 var 关键字,规规矩矩,适合声明全局变量或者需要显式指定类型的时候。

// 格式:var 变量名 类型 = 值
var name string = "唐伯虎"
var age int = 25
var isHandsome bool = true

第二招:自动识别 (Type Inference)

如果你懒得写类型,华夫人(编译器)很聪明,能根据右边的值自动推断出来。

var power = 10000  // 编译器:嗯,这是个 int
var salary = 99.5  // 编译器:嗯,这是个 float64

第三招:闪电剑法 (Short Declaration)

这是 Go 语言最独门的绝技!用 :=,连 var 都省了。注意:此招式只能在函数内部使用!

func main() {
    love := "秋香"  // 等同于 var love string = "秋香"
    // 华夫人警告:在函数外面用 := 是要被打板子的!
}

🤹 组合拳 (高级用法)

1. 批量注册 (多变量声明)

一次性搞定四个香。

var (
    chunxiang = "春香"
    xiaxiang  = "夏香"
    qiuxiang  = "秋香"
    dongxiang = "冬香"
)

2. 移形换影 (值交换)

在别的语言里,交换两个变量的值需要找个“中间人”(临时变量)。在 Go 里,一招搞定!

a := 100
b := 200
a, b = b, a // 瞬间交换!a变成200,b变成100

3. 隐形人 (匿名变量)

有时候函数返回两个值,你只想要其中一个。另一个怎么办?扔掉!用下划线 _ 表示。

石榴姐
石榴姐: 哎呀,如果有人送我鲜花和牛粪,我只要鲜花,牛粪就丢给 _ 吧!
func getGift() (string, string) {
    return "鲜花", "牛粪"
}

flower, _ := getGift() // 我只要鲜花,牛粪丢进垃圾桶(匿名变量)

🎯 练功房(改名换姓)

变量之所以叫变量,因为它的值是可以变的。但要注意,类型一旦确定就不能变了。

package main
import "fmt"

func main() {
    name := "9527"
    fmt.Println("初始名字:", name)
    
    // 任务1:把 name 改成 "华安"
    // name = ______
    
    // 任务2:尝试把 name 改成 12345 (整数),看看会发生什么?
    // name = 12345 
    
    fmt.Println("现在名字:", name)
}

任务: 思考一下,为什么不能把 name 改成数字?

代码解析:

name = "华安" // 正确,都是 string 类型

如果你尝试 name = 12345,编译器会报错:cannot use 12345 (type int) as type string in assignment

唐伯虎总结: 变量如人,虽然可以改名换姓(值变),但不能连种族都变了(类型不变)!这就是 Go 语言的静态强类型特性。