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
}
相关推荐
ByNotD0g26 分钟前
深入解析 Go 官方更新:实验性 goroutineleak Profile 原理与机制
开发语言·后端·golang
不会写DN28 分钟前
Go 标准库 net/http 包都能干嘛?
开发语言·http·golang
吾诺1 小时前
GO 快速升级Go版本
开发语言·redis·golang
ErizJ1 小时前
面试 | Go八股
面试·golang
不会写DN1 小时前
Go 网络编程实战:构建一个最小可用的 TCP 交互程序
网络·tcp/ip·golang
HashFlag1 小时前
go-mcp基础
golang·mcp·go-mcp
小红卒2 小时前
Go语言安全开发学习笔记5:tls反弹shell升级到C2指令执行马
笔记·学习·网络安全·golang
小红卒13 小时前
Go语言安全开发学习笔记1:Windows反向TCP反弹Shell 原理与代码
golang
lisus200717 小时前
GO并发统计文件大小
开发语言·后端·golang
lars_lhuan18 小时前
Go 并发
golang