网站首页 > 基础教程 正文
Go 语言变量(Variable)
在Go语言中,变量是存储数据的基本单元,必须先声明再使用。Go语言提供了多种变量声明和初始化方式。
1. 变量的声明方式
(1) 使用var关键字
标准变量声明格式:
var 变量名 变量类型
示例:
var a int // 声明一个 int 类型变量,默认值为 0
var b string // 声明一个字符串变量,默认值为 ""
var c bool // 声明一个布尔变量,默认值为 false
(2) 声明并初始化
可以在 var 语句中直接赋值:
var d int = 10
var e string = "hello"
var f bool = true
注意: 变量的类型可以由编译器自动推断:
var g = 3.14 // 自动推断为 float64
var h = "Go" // 自动推断为 string
(3) 批量变量声明
可以使用 var 关键字一次声明多个变量:
var (
x int = 100
y string = "golang"
z bool = false
)
2. 简短变量声明(:=)
在函数内部,Go 提供了 := 语法,可以自动推断变量类型并初始化:
i := 42 // 自动推断 int
j := "hello" // 自动推断 string
k := 3.14 // 自动推断 float64
注意: := 只能用于函数内部,不能用于包级别的变量声明。
3. 变量的默认值
Go 语言的变量在未初始化时,会有零值(Zero Value):
- 整型(int, float) → 0
- 字符串(string) → ""(空字符串)
- 布尔型(bool) → false
- 指针(pointer) → nil
- 切片(slice)、映射(map)、通道(chan) → nil
示例:
var a int
var b string
var c bool
var d float64
fmt.Println(a, b, c, d) // 输出:0 "" false 0
4. 变量的作用域
(1) 局部变量
局部变量在函数内部声明,仅在函数内可用:
func test() {
localVar := "I am local"
fmt.Println(localVar)
}
// localVar 在 test() 外部不可访问
(2) 全局变量
在函数外部声明的变量可在整个包(package)中使用:
var globalVar = "I am global"
func test() {
fmt.Println(globalVar) // 可以访问
}
(3) 变量的可见性
- 小写字母开头的变量:包作用域(只能在同一个包内访问)
- 大写字母开头的变量:可导出(Exported),可以被其他包访问
示例:
package main
import "fmt"
var globalVar = "包内可访问" // 小写,包作用域
var GlobalVar = "所有包可访问" // 大写,跨包可访问
func main() {
fmt.Println(globalVar)
fmt.Println(GlobalVar)
}
5. 变量的特殊用法
(1) 匿名变量_
Go 允许使用 _(匿名变量)来忽略不需要的变量:
func getValues() (int, string) {
return 100, "hello"
}
func main() {
x, _ := getValues() // 只获取第一个返回值,忽略第二个
fmt.Println(x) // 输出:100
}
(2) 交换变量的值
Go 语言可以直接交换两个变量的值,不需要临时变量:
a, b := 10, 20
a, b = b, a
fmt.Println(a, b) // 输出:20 10
(3) 多变量同时赋值
x, y, z := 1, 2, "hello"
fmt.Println(x, y, z) // 输出:1 2 hello
6. 变量与指针
Go 语言支持指针变量,可以存储变量的内存地址:
var a int = 42
var ptr *int = &a // `&` 获取变量的地址
fmt.Println(ptr) // 输出:变量 a 的内存地址
fmt.Println(*ptr) // 输出:42(通过指针访问值)
修改指针指向的值:
*ptr = 100
fmt.Println(a) // 变量 a 的值变为 100
总结
方式 | 语法 | 适用场景 |
var 关键字 | var a int | 适用于全局或显式指定类型的变量 |
var 关键字 + 初始化 | var a = 100 | 适用于自动推断类型的情况 |
简短声明 := | a := 100 | 仅能在函数内部使用,推荐用于局部变量 |
批量声明 | var (a int; b string) | 适用于多个变量一起声明 |
匿名变量 _ | _, b := getValues() | 忽略不需要的返回值 |
指针 | var p *int = &a | 访问变量地址或修改变量值 |
- 上一篇: C语言50个函数
- 下一篇: C语言指针专题第11讲:结构体指针
猜你喜欢
- 2025-03-12 C语言指针专题第11讲:结构体指针
- 2025-03-12 C语言50个函数
- 2025-03-12 PyTorch架构优化库torchao正式发布,可大幅提升AI模型效率
- 2025-03-12 C++学习笔记——调用函数
- 2025-03-12 python散装笔记——148:不可变类型int float str tuple和frozenset
- 2025-03-12 计算机是如何表示浮点数的
- 2025-03-12 Python 学习必修课:轻松掌握输入输出与数据类型转换
- 2025-03-12 4000字详细说明,推荐20个好用到爆的Pandas函数方法
- 2025-03-12 NCRE全国计算机等级考试二级Python-100填空题【带解析】
- 2025-03-12 MySQL中的存储过程和函数
- 03-12Java程序员Python学习指南(中篇)
- 03-12从IO到NIO:Java数据传输的进阶之路
- 03-12智能库存管理系统:让仓库管理变得简单高效
- 03-12java IO知识体系
- 03-12还不理解 Error 和 Exception 吗,看这篇就够了
- 03-12在Java里如何读取文件
- 03-12FileReader
- 03-12C语言指针专题第11讲:结构体指针
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)