Go 语言变量详解
                           
天天向上
发布: 2025-03-25 23:35:58

原创
385 人浏览过

在 Go 语言中,变量(Variable)用于存储不同类型的数据。Go 语言是静态类型语言,变量在使用前必须声明,并且一旦确定类型就不能更改。本文将全面讲解 Go 语言变量的定义、作用域、类型推导等内容。


1. 变量的声明方式

Go 语言支持三种声明变量的方式:

  1. 使用 var 关键字声明变量
  2. 使用 := 进行简短声明
  3. 使用 const 声明常量

(1)使用 var 关键字

var name string = "Alice"
var age int = 25
var isStudent bool = false

特点:

  • 变量类型在 var 变量名 类型 形式中显式指定。
  • 可在函数外部(包级作用域)或函数内部声明。

(2)省略类型(自动推导)

var city = "Beijing"
var temperature = 26.5

特点:

  • 编译器自动推导 citystringtemperaturefloat64

(3)使用 := 进行简短声明

message := "Hello, Go!"
score := 95
isPassed := true

特点:

  • 只能用于函数内部,不能用于全局变量
  • := 自动推导变量类型。

(4)声明多个变量

var a, b, c int // 多个变量声明
var x, y = "Go", 100 // 多个变量推导类型
p, q := 1.5, false   // 多个变量简短声明

(5)变量分组声明

var (
    username string  = "John"
    age      int     = 30
    salary   float64 = 5000.50
)
  • var (...) 方式适用于多个变量的声明,增强可读性。

2. 变量的作用域

变量的作用域决定了它在程序中的可见范围,主要有全局变量局部变量

(1)全局变量

  • 定义在函数外部
  • 整个包都可访问
package main

import "fmt"

// 全局变量
var globalVar = "I am a global variable"

func main() {
    fmt.Println(globalVar) // 可访问
}

(2)局部变量

  • 定义在函数内部
  • 作用域仅限该函数
func main() {
    localVar := "I am a local variable"
    fmt.Println(localVar) // 正常访问
}
// fmt.Println(localVar) // ❌ 报错:变量超出作用域

3. 变量的默认值

在 Go 语言中,未初始化的变量会赋默认值:

数据类型默认值
int0
float640.0
boolfalse
string""(空字符串)
指针、slice、mapnil

示例:

var num int      // 默认为 0
var price float64 // 默认为 0.0
var isActive bool // 默认为 false
var text string  // 默认为 ""

4. 变量的类型转换

Go 不支持隐式类型转换,需要使用显式转换:

var a int = 10
var b float64 = float64(a) // int 转 float64
var c string = strconv.Itoa(a) // int 转 string
源类型目标类型转换方法
intfloat64float64(i)
float64intint(f)
intstringstrconv.Itoa(i)
stringintstrconv.Atoi(s)

5. 常量(const

常量一旦声明,值不能修改

const PI = 3.1415926
const GREETING = "Hello, Go!"
  • const 只能用于编译期可确定的值,如数字、字符串、布尔等。
  • 不能使用 := 声明常量

枚举(iota)

const (
    Sunday = iota // 0
    Monday        // 1
    Tuesday       // 2
)
fmt.Println(Sunday, Monday, Tuesday) // 0 1 2

6. 特殊变量 _(空白标识符)

Go 语言提供 _(空白标识符)用于丢弃不需要的变量:

num, _ := strconv.Atoi("100") // 只获取数值,忽略错误

7. 变量生命周期

  • 全局变量:程序启动时创建,程序结束时销毁。
  • 局部变量:进入作用域时创建,离开作用域时销毁。

示例:

func main() {
    num := 100 // 只在 main 函数内存在
    fmt.Println(num)
} // num 变量销毁

8. 参考资料

你对 Go 变量还有其他问题吗?😊

发表回复 0

Your email address will not be published. Required fields are marked *