Go-变量、数据类型分类
1 变量的定义
- 变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)
- 变量可以看做是一个房间的门牌号,通过门牌号我们可以找到房间(数据在房间里),房间的类型就是(数据类型),通过变量名可以访问到变量(值)。
2 变量的注意事项
- 变量三要素:变量名, 数据类型, 值
- 变量在同一个作用域内不能重名,不能重复声明,声明后赋值必须严格按照声明的类型赋值
- 变量名应由英文大小写字母,数字和下划线组成,且必须由英文字母开头
- 变量的命名严格区分英文字母大小写
- Golang的变量如果没有赋初值,编译器会使用默认值,比如int默认值是0,string的默认值是空串
- Golang的变量如果没有指定数据类型,Golang会根据值自行判定变量类型(类型推导)
3 变量的使用步骤
3.1 变量的一般使用步骤
package main
import "fmt"
func main() {
//变量的声明
var age int
//变量的赋值
age = 25
//变量的使用
fmt.Println("my age is ", age)
}
-----------------输出
PS C:\Goproject> cd .\src\gocode\project01\main\
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
var.go:1:1: expected 'package', found 'EOF' #需要CTRL+s保存代码
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is 25
PS C:\Goproject\src\gocode\project01\main>
3.2 变量的声明并赋值
package main
import "fmt"
func main() {
//变量的声明+赋值
var age int = 25
//变量的声明+赋值:=简短格式
height := 175
//变量的使用
fmt.Println("my age is ", age)
fmt.Println("my height is ", height)
}
-------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is 25
my height is 175
PS C:\Goproject\src\gocode\project01\main>
3.3 多变量声明+赋值
package main
import "fmt"
func main() {
//一次性声明多个变量
var age, height int = 25, 175
//变量的使用
fmt.Println("my age is ", age)
fmt.Println("my height is ", height)
}
----------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is 25
my height is 175
PS C:\Goproject\src\gocode\project01\main>
package main
import "fmt"
func main() {
//一次性声明多个变量
var age, height, name = 25, 175, "du-z"
//变量的使用
fmt.Println("my age is ", age)
fmt.Println("my height is ", height)
fmt.Println("my name is ", name)
}
-------------------输出
PS C:\Goproject> cd .\src\gocode\project01\main\
PS C:\Goproject\src\gocode\project01\main> go run .\var.go
my age is 25
my height is 175
my name is du-z
PS C:\Goproject\src\gocode\project01\main>
4 变量作用域
4.1 局部变量
- 在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。
- 局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。
示例局部变量 a、b、c
package main
import (
"fmt"
)
func main() {
//声明局部变量 a 和 b 并赋值
var a int = 3
var b int = 4
//声明局部变量 c 并计算 a 和 b 的和
c := a + b
fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}
---------------运行结果
a = 3, b = 4, c = 7
4.2 全局变量
- 在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件
- 需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量
- 全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写
示例全局变量 c。
package main
import "fmt"
//声明全局变量
var c int
func main() {
//声明局部变量
var a, b int
//初始化参数
a = 3
b = 4
c = a + b
fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}
-----------运行结果
a = 3, b = 4, c = 7
Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑
package main
import "fmt"
//声明全局变量
var a float32 = 3.14
func main() {
//声明局部变量
var a int = 3
fmt.Printf("a = %d\n", a)
}
------------------运行结果
a = 3
4.3 形式参数
- 在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。
- 形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。
- 形式参数会作为函数的局部变量来使用。
示例形式参数 a 和 b
package main
import (
"fmt"
)
//全局变量 a
var a int = 13
func main() {
//局部变量 a 和 b
var a int = 3
var b int = 4
fmt.Printf("main() 函数中 a = %d\n", a)
fmt.Printf("main() 函数中 b = %d\n", b)
c := sum(a, b)
fmt.Printf("main() 函数中 c = %d\n", c)
}
func sum(a, b int) int {
fmt.Printf("sum() 函数中 a = %d\n", a)
fmt.Printf("sum() 函数中 b = %d\n", b)
num := a + b
return num
}
----------------运行结果
main() 函数中 a = 3
main() 函数中 b = 4
sum() 函数中 a = 3
sum() 函数中 b = 4
main() 函数中 c = 7
5 匿名变量
5.1 什么是匿名变量
- 在Go语言中,匿名变量就是没有名字的变量;
- 匿名变量不占用内存空间,不会分配内存,匿名变量与匿名变量之间也不会因为多次声明而无法使用。
- 匿名变量的特点是一个下画线“”,“”本身就是一个特殊的标识符,可以像其他标识符那样用于变量的声明或赋值,但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。
- 它可以被视为一个占位符,表示我们对该值不感兴趣或不需要使用。
5.2 使用匿名变量
忽略函数返回值:
func getData() (string, int) {
// 假设这是一个函数返回字符串和整数的示例
return "data", 123
}
func main() {
_, num := getData()
// 忽略第一个返回值
fmt.Println("Number:", num)
}
//在上述示例中,我们使用匿名变量_来忽略函数getData的第一个返回值,因为我们只对第二个返回值感兴趣。
忽略循环中的索引或元素:
numbers := []int{1, 2, 3, 4, 5}
for _, num := range numbers {
// 忽略索引,只使用元素值
fmt.Println("Number:", num)
}
//在上述示例中,我们使用匿名变量_来忽略循环中的索引值,只关注切片numbers中的元素值。
忽略未使用的变量:
func main() {
_ = 100
// 忽略未使用的变量
}
//在上述示例中,我们使用匿名变量_来忽略未使用的变量,以避免编译器报告未使用变量的警告。
6 数据类型分类
基本数据类型
数值型
整数型:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte
浮点型:float32、float64
布尔型(bool):true、false
字符型(golang没有单独的字符型,使用byte来保存单个字母字符)
字符串(string)
派生数据类型/复杂数据类型
指针
数组
结构体
管道
函数
切片
接口
map