Go学习笔记:变量声明与基本类型——三种写法一次搞懂

0 阅读3分钟

一、三种变量声明方式

1.1 var + 类型(最正式)

var name string = "pc"
var age int = 25

适用场景:

  • 声明包级变量(函数外面)
  • 需要明确指定类型
  • 希望代码读起来一目了然

1.2 var + 类型推断(省去类型)

var name = "pc"   // Go 自动推断为 string
var age = 25      // 自动推断为 int

Go 会根据右边的值自动推断类型,不用每次都写类型。

1.3 := 短声明(最常用,函数内专用)

name := "pc"
age := 25

特点:

  • 只能在函数内部使用
  • 最简洁,日常写代码最常用
  • 可以配合多返回值:count, err := doSomething()
  • := 允许混合使用新变量和已有变量:
count, err := doSomething()    // count 和 err 都是新的
total, err := doNext()         // err 已存在,只是重新赋值;total 是新变量

对比总结

写法位置限制可读性使用频率
var x int = 10无限制⭐⭐⭐ 最高包级变量 / 明确类型
var x = 10无限制⭐⭐包级变量
x := 10仅函数内⭐ 最简洁日常最高

二、Go 的基本类型

2.1 数值类型

var (
    a int     = 42     // 平台相关:32位或64位
    b int8    = 127    // -128 ~ 127
    c int16   = 32767  // -32768 ~ 32767
    d int32   = 20     // -21亿 ~ 21亿
    e int64   = 100    // 很大的数
    
    f uint    = 100    // 无符号整数
    g byte    = 'A'    // byte = uint8 的别名,值 = 65
)

浮点数:

var (
    price float32 = 19.9        // 精度较低
    pi    float64 = 3.1415926   // 精度高,推荐使用 ✅
)

💡 原则:整数用 int,小数用 float64,除非有特殊需求。

2.2 布尔类型

var enabled bool = true
var disabled bool = false

布尔值只能为 truefalse不能像 Python 那样用 0 / 1 代替。

2.3 字符串类型

var name string = "Go语言"

// 字符串可以拼接
greeting := "你好," + "Go"

// 取长度
fmt.Println(len("Go"))        // 2

// 索引取值(拿到的是 byte)
fmt.Println("Go"[0])          // 71('G' 的 ASCII)

⚠️ 注意:Go 字符串的 len() 返回的是字节数,不是字符数。中文等 Unicode 字符可能占多个字节。

2.4 零值(默认值)

Go 的每个变量都有默认值,不存在"未初始化"的情况

类型零值
int / 所有数值类型0
float640.0
boolfalse
string""(空字符串)
指针 / 接口 / 切片 / mapnil
var num int        // num = 0,不需要写 = 0
var str string     // str = "",可以直接用

三、批量声明

当有多个变量时,可以用 var() 块批量声明,让代码更整洁:

var (
    name    string = "pc"
    age     int    = 25
    enabled bool   = true
    score   int           // 不赋值,默认 0
)

四、值得注意的细节

1. Go 不允许声明了变量却不使用

a := 1
b := 2
fmt.Println(a)   // ❌ 编译错误:b declared but not used

这是 Go 的设计哲学——代码必须干净。不用的变量就删掉或用 _ 忽略。

2. =:= 的区别

x := 10    // := 声明 + 赋值(变量不存在时使用)
x = 20     // =  只赋值(变量已存在时使用)

五、小结

概念要点
声明方式var x T = v / var x = v / x := v
函数内优先用 :=
函数外只能用 var
基本类型int、float64、bool、string、byte
零值每个变量都有默认值,不会为空
未使用Go 编译不通过,必须用掉或删掉