如何在Golang中声明变量_Golang变量声明方式总结

1次阅读

Go 变量声明要求类型在变量名后,如var port int = 8080;短变量声明:= 仅限函数内使用且需至少一个新变量;未初始化变量取类型零值(如 int 为 0、string 为 ””);结构体字段不可用:= 单独赋值。

如何在 Golang 中声明变量_Golang 变量声明方式总结

var 声明变量时,类型和值的顺序不能颠倒

Go 不允许像 C 或 Java 那样把类型写在变量名前面(如 int x = 1)。var 声明必须是 var name type = valuevar name type,类型永远在变量名之后。

  • 正确:
    var port int = 8080
  • 错误:
    var int port = 8080  // 编译报错:expected 'IDENT', found 'int'
  • 如果带初始化,类型可省略:
    var host = "localhost" // host 类型自动推导为 string
  • 多个同类型变量可批量声明:
    var a, b, c int = 1, 2, 3

短变量声明 := 只能在函数内部使用

:= 是 Go 的快捷语法,它隐式调用 var 并自动推导类型,但有严格 作用域 限制——不能在包级(全局)作用域使用。

  • 函数内合法:
    func main() {     name := "Alice" // 等价于 var name string = "Alice"}
  • 包级非法:
    package main name := "Bob" // 编译报错:syntax error: non-declaration statement outside function body
  • := 要求左边至少有一个新变量名;重复声明已有变量会报错:
    port := 3000 port := 4000 // 错误:no new variables on left side of :=

零值不是空或 nil,而是类型默认值

Go 中未显式初始化的变量会被赋予对应类型的零值(zero value),这不是 nil(仅用于指针、map、slice、func、channel、interface),也不是 Python 的 None 或 JS 的 undefined

  • int 零值是 0string""boolfalse
  • var m map[string]intmnil,此时直接 m["k"] = 1 会 panic;必须先 m = make(map[string]int)
  • var s []intsnil,但可直接用 append(s, 1)(Go 允许对 nil slice append)

结构体字段声明不支持简写初始化(除非用字面量)

结构体变量声明不能用 := 单独初始化某个字段,字段赋值必须通过结构体字面量或后续点号赋值完成。

立即学习go 语言免费学习笔记(深入)”;

  • 合法:
    type Config struct {Port int     Host string} cfg := Config{Port: 8080, Host: "0.0.0.0"} // 字面量初始化
  • 非法:
    var cfg Config cfg.Port := 8080 // 错误::= 不能用于字段赋值
  • 合法替代:
    cfg.Port = 8080 // 必须先声明,再逐个赋值
  • 字段顺序敏感:如果不用键名(Port: 8080),则必须按定义顺序提供值:
    cfg2 := Config{8080, "localhost"} // OK,但易错且难维护
结构体嵌套、接口变量、指针声明这些场景下,零值行为和初始化约束更隐蔽,稍不注意就会在运行时 panic 或逻辑异常。

text=ZqhQzanResources