变量与常量

变量声明

Go 提供三种变量声明方式:

package main

import "fmt"

func main() {
    // 1. var 关键字 + 类型
    var age int = 30

    // 2. var + 类型推断(省略类型)
    var name = "Alice"

    // 3. 短变量声明(仅限函数内部)
    city := "Beijing"

    fmt.Println(age, name, city)
}
Tip

实践中优先使用 := 短声明;需要显式指定类型或声明包级变量时使用 var

可以在一条语句中声明多个变量:

var x, y int = 1, 2
u, v := 3.14, "hello"

基本数据类型

分类类型说明
整数intint8int16int32int64int 随平台为 32 或 64 位,日常首选
无符号整数uintuint8uint64uintptr不表示负数
浮点数float32float64默认使用 float64
布尔booltruefalse
字符串string不可变的 UTF-8 字节序列
复数complex64complex128科学计算场景
字节/字符byteuint8 别名)、runeint32 别名)rune 表示一个 Unicode 码点

零值

Go 中变量声明后若未赋值,会被自动初始化为该类型的零值,不存在"未定义"状态:

var i int      // 0
var f float64  // 0.0
var b bool     // false
var s string   // ""(空字符串)
var p *int     // nil

类型转换

Go 没有隐式类型转换,不同类型之间的运算必须显式转换:

i := 42
f := float64(i)      // int -> float64
u := uint(f)         // float64 -> uint
s := strconv.Itoa(i) // int -> string(strconv 包)
n, _ := strconv.Atoi("123") // string -> int
Warning

整数与字符串之间没有直接的类型转换语法,必须使用 strconv 包或 fmt.Sprintf。数值转换可能发生精度丢失或溢出,需自行确认取值范围。

常量

常量使用 const 声明,编译期确定取值:

const Pi = 3.14159
const AppName string = "Golang Tutorial"

// 分组声明
const (
    StatusOK    = 200
    StatusError = 500
)

iota:枚举的惯用写法

iota 是常量组中的自增计数器,从 0 开始,每换一行加一:

type Weekday int

const (
    Sunday    Weekday = iota // 0
    Monday                   // 1
    Tuesday                  // 2
    Wednesday                // 3
    Thursday                 // 4
    Friday                   // 5
    Saturday                 // 6
)

省略表达式的行会沿用上一行表达式,因此常见于位运算枚举:

const (
    Read  = 1 << iota // 1(2^0)
    Write             // 2(2^1)
    Execute           // 4(2^2)
)

小结

  • 优先使用 := 短声明;var 用于包级变量或显式类型。
  • 变量必有零值;类型转换必须显式进行。
  • 枚举场景使用 const + iota 组合。