变量声明与初始化
1. 标准声明
var 变量名 类型 = 值
显式声明类型,支持零值初始化(未赋值时自动赋予零值)
- 示例:
var a int // 零值为0
var b string // 零值为空字符串
var c bool // 零值为false
2. 类型推导
var 变量名 = 值
编译器根据右侧值自动推断类型
- 示例:
var name = "Alice" // 推断为string
var age = 30 // 推断为int
3. 简短声明( :=
)
变量名 := 值
只能在函数内部使用,等同于声明+赋值
- 示例:
x := 3.14 // 自动推断为float64 可以理解为 : var x = 3.14
isActive := true // 自动推断为bool
4. 多变量声明
var a, b, c = 1, "hello", true // 类型混合
x, y := 10, 20 // 简短声明
支持批量声明,类型可不同
变量的作用域
Go中的变量作用域分为包级和函数级:
- 包级变量:声明在函数外,作用域为整个包。
- 函数级变量:声明在函数内,作用域仅限于该函数。
此外,Go还支持块级作用域,如在if
、for
或switch
语句块内的变量仅在块内有效。
示例:
package main
var globalVar int = 100 // 包级变量
func main() {
var localVar int = 200 // 函数级变量
if true {
var blockVar int = 300 // 块级变量
fmt.Println(blockVar)
}
fmt.Println(localVar)
fmt.Println(globalVar)
}
数据类型
各个类型对应的零值
类型 | 说明 | 零值 |
---|---|---|
int | 整型(32/64位系统自适应) | 0 |
float64 | 双精度浮点 | 0.0 |
bool | 布尔值 | false |
string | UTF-8字符串 | "" |
byte | uint8别名 | 0 |
rune | int32别名(Unicode码点) | 0 |
Go的基本数据类型
Go提供多种内置类型:
- Boolean:
bool
,值为true
或false
。 - Integers:
int8
,int16
,int32
,int64
,以及uint
对应无符号类型。 - Floating-point:
float32
,float64
。 - Complex numbers:
complex64
,complex128
。 - String:
string
,不可变,UTF-8编码。 - Rune:
rune
,即int32
,代表一个Unicode码点。
示例:
var a bool = true
var b int = 100
var c float64 = 3.14
var d string = "Hello"
var e rune = 'A'