Go语言变量定义指南:从入门到精通

📝 Go语言变量定义的基本方式

1. 标准定义方式

Go 复制代码
var name string = "张三"
var age int = 25
var score float64 = 98.5

这是最完整的变量定义形式,包含了var关键字、变量名、类型和初始值。

2. 类型推断定义

Go 复制代码
var name = "李四"  // 自动推断为string类型
var age = 30       // 自动推断为int类型
var height = 175.5 // 自动推断为float64类型

Go编译器会根据初始值自动推断变量类型,让代码更加简洁!

3. 短变量声明(最常用)

Go 复制代码
name := "王五"
age := 28
score := 99.9

这是在函数内部最常用的定义方式,简洁而强大!✨

🎯 多变量定义技巧

同行定义多个变量

Go 复制代码
var name, age, city = "赵六", 32, "北京"
// 或者使用短变量声明
name, age, city := "赵六", 32, "北京"

使用var块批量定义

Go 复制代码
var (
    name    string = "小明"
    age     int    = 18
    address string = "上海市"
    score   float64
)

💡 零值初始化

Go 复制代码
var (
    i int        // 0
    f float64    // 0.0
    b bool       // false
    s string     // ""
    p *int       // nil
)

⚠️ 变量定义注意事项

1. 短变量声明限制

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

Go 复制代码
// 错误!不能在包级别使用短变量声明
// name := "张三"

// 正确方式
var name = "张三"

2. 未使用变量

Go语言要求声明的变量必须被使用,否则编译会报错:

Go 复制代码
func main() {
    var a int = 10  // 编译错误:a declared but not used
    
    b := 20         // 编译错误:b declared but not used
    _ = b           // 使用空标识符避免错误
}

🚀 高级技巧

1. 匿名变量

Go 复制代码
// 使用下划线忽略不需要的值
_, err := someFunction()
value, _ := someFunction()

// 忽略循环中的索引
for _, item := range items {
    fmt.Println(item)
}

2. 变量作用域

Go 复制代码
var globalVar = "我是全局变量" // 包级作用域

func main() {
    localVar := "我是局部变量" // 函数级作用域
    
    if true {
        blockVar := "我是块级变量" // 块级作用域
        fmt.Println(blockVar)
    }
    // fmt.Println(blockVar) // 错误:在这里无法访问
}

🔥 实战示例

Go 复制代码
package main

import "fmt"

// 包级变量
var (
    appName    = "MyApp"
    version    = "1.0.0"
    buildTime  string
)

func main() {
    // 函数内部使用短声明
    userName := "admin"
    isLoggedIn := true
    
    // 多变量声明
    status, code := "success", 200
    
    // 使用匿名变量忽略不需要的值
    _, port := getServerConfig()
    
    fmt.Printf("应用: %s, 版本: %s\n", appName, version)
    fmt.Printf("用户: %s, 登录状态: %v\n", userName, isLoggedIn)
    fmt.Printf("状态: %s, 代码: %d\n", status, code)
    fmt.Printf("端口: %d\n", port)
}

func getServerConfig() (string, int) {
    return "localhost", 8080
}
相关推荐
紧跟先前的步伐6 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
日日大王学编程8 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
北冥you鱼15 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
利威尔xu18 小时前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
microrain18 小时前
SagooIoT 把协议解析和消息通知都放进了独立进程
物联网·golang·插件·sagooiot
北冥you鱼19 小时前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
microrain19 小时前
把规则链存成文件之后,上线一条规则只需改一个字段
物联网·golang·规则引擎·sagooiot
SEO_juper1 天前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
FungLeo2 天前
成为全栈·Go 后端篇·跨语言认证兼容:Node 与 Go 如何互认 JWT 和密码
golang·go·jwt·身份认证·成为全栈·bcrypt