声明变量

变量基础概念

  • 定义:在 Go 中,变量是一个包含值的存储器。
  • 声明语法:使用 var 关键字,后跟变量名和类型(var 名称 类型)。
  • 批量声明:可以同时声明多个同类型变量,如 var length, width float64

变量赋值规则

  • 基础赋值:声明后,使用 = 赋值(如 quantity = 2)。
  • 多变量赋值:同一语句中为多个变量赋值,左侧变量名与右侧值用逗号分隔,如 length, width = 1.2, 2.4
  • 声明并赋值:若事先知道值,可在同一行完成(如 var quantity int = 4)。
  • 类型推断:声明时若直接赋值,可省略类型,Go 会根据值自动推断(如 var quantity = 4 推断为 intvar customerName = "Damon Cole" 推断为 string)。多变量同理:var length, width = 1.2, 2.4 均推断为 float64

静态类型与类型安全

  • 类型约束:为现有变量分配新值时,必须是同一类型。Go 的静态类型确保不会意外分配错误类型。
  • 错误示例quantity 声明为 int,若赋字符串 "Damon Cole";或 customerNamestring,若赋值数字 4,编译器会报错(如 cannot use "Damon Cole" (type string) as type int in assignment)。
  • 使用场景:赋值后可在任何上下文中使用,如打印或参与运算(length * width)。

代码演示与解析

package main

import (
    "fmt"
    "reflect"
)

func main() {
    // 声明变量(未赋值)
    var quantity int
    var length, width float64
    var customerName string

    // 赋值(包括多变量赋值)
    quantity = 4
    length, width = 1.2, 2.4
    customerName = "Damon Cole"

    // 声明并赋值(类型推断)
    var q = 4               // 推断为 int
    var l, w = 1.2, 2.4     // 推断为 float64
    var c = "Damon Cole"    // 推断为 string

    // 使用变量
    fmt.Println(customerName, "has ordered", quantity, "sheets")
    fmt.Println("each with an area of", length*width, "square meters")

    // 验证类型
    fmt.Println(reflect.TypeOf(q))      // 输出: int
    fmt.Println(reflect.TypeOf(l))      // 输出: float64
    fmt.Println(reflect.TypeOf(w))      // 输出: float64
    fmt.Println(reflect.TypeOf(c))      // 输出: string
}Code language: JavaScript (javascript)

运行输出示例

Damon Cole has ordered 4 sheets
each with an area of 2.88 square meters
int
float64
float64
stringCode language: JavaScript (javascript)

总结

特性变量(var)常量/字面量符文(rune)字符串(string)
声明var name type直接写(如 4单引号 'A'双引号 "abc"
类型显式或推断(静态)默认(int, float64等)int32 (Unicode)string
赋值= 可修改(同类型)不可变不可变不可变
用途存储可变状态固定值单字符码点文本序列

结合前节静态类型知识,变量声明后类型固定,赋值时严格检查,这保障了代码安全性。类型推断(var x = 值)让代码更简洁,同时保留类型安全。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注