全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-13 5 分钟 ✍️ juanwangdev

Go变量初始化

Go变量初始化在声明时完成,方式灵活。

初始化时机

声明时初始化

Go
// 声明并初始化
var name string = "Tom"

// 短声明初始化
age := 25

// 声明时确定初始值
var count = getCount()  // 函数调用初始化

零值初始化

Go
// 声明不初始化,自动零值
var num int     // 0
var str string  // ""
var active bool // false

未显式初始化的变量自动获得类型的零值。

初始化方式

直接赋值

Go
var a int = 10
var b string = "hello"

// 短声明
c := 10
d := "hello"

表达式初始化

Go
var a = 10 + 5      // 15
var b = len("hello") // 5

// 短声明
c := 10 * 2
d := 3.14 * 2

函数调用初始化

Go
func getConfig() string {
    return "config"
}

var config = getConfig()

// 短声明
port := getPort()

复合类型初始化

Go
// 数组
var arr = [3]int{1, 2, 3}

// slice
var slice = []int{1, 2, 3}

// map
var m = map[string]int{"a": 1, "b": 2}

// struct
var user = User{Name: "Tom", Age: 25}

结构体初始化

指定字段名

Go
type User struct {
    Name string
    Age  int
}

// 指定字段名初始化
u := User{
    Name: "Tom",
    Age:  25,
}

// 部分字段初始化(其他零值)
u := User{Name: "Tom"}  // Age=0

按顺序初始化

Go
// 按字段顺序(必须全部)
u := User{"Tom", 25}

// 部分字段必须用字段名
u := User{"Tom"}  // 编译错误!缺少Age

推荐使用字段名初始化,更清晰且可省略字段。

指针初始化

Go
// 返回指针
u := &User{Name: "Tom"}

// 或使用new
u := new(User)
u.Name = "Tom"

slice和map初始化

slice初始化

Go
// 直接初始化
s := []int{1, 2, 3}

// make初始化(指定长度)
s := make([]int, 3)     // [0, 0, 0]

// make初始化(指定长度和容量)
s := make([]int, 3, 10)

map初始化

Go
// 直接初始化
m := map[string]int{"a": 1}

// make初始化
m := make(map[string]int)
m["a"] = 1

init函数初始化

包级别复杂初始化

Go
var config Config

func init() {
    config = loadConfig("config.yaml")
}

func main() {
    // config已初始化
    run(config)
}

init函数在main之前执行,用于复杂初始化。

初始化方式对比

方式语法适用场景
零值var name type默认值够用
直接赋值var name = value简单初始化
短声明name := value函数内简洁
makemake(T, size)slice/map/channel
复合字面量T{field: value}struct/array
函数调用var name = fn()动态初始值
init函数func init()复杂包初始化

初始化最佳实践

Go
package main

// 包级别:推荐var
var (
    version = "1.0"
    debug   = false
)

func main() {
    // 函数内:推荐:=
    name := "Tom"
    age := 25

    // 需要容量预分配:用make
    data := make([]int, 0, 100)

    // 结构体:用字段名
    user := User{
        Name: "Tom",
        Age:  25,
    }
}

要点总结

  • 声明时初始化,或自动零值
  • 函数内优先使用:=短声明
  • 结构体初始化推荐字段名方式
  • slice/map用make预分配容量
  • 复合字面量初始化数组/map/struct
  • init函数处理复杂包初始化
  • 初始化在声明时完成,无延迟

📝 发现内容有误?点击此处直接编辑

← 上一篇 Go变量作用域
下一篇 → Go变量声明
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库