变量定义
变量就是声明在内存中的一些数据,用于后续逻辑的操作和控制
变量的声明
package main
import (
"fmt"
"math"
)
// 全局变量声明和赋值
var (
name string = "hahah"
num int64 = 64
done bool = true
)
func main() {
// 使用num全局变量
fmt.Println(num)
// 局部变量声明和赋值(显示定义变量类型)
var num0 int32 = 92
fmt.Println(num0)
// 局部变量声明和赋值(自动推导变量类型)
var num1 = 61
fmt.Println(num1)
// 局部变量声明和赋值(短声明)
num2, num3 := 61.0, 62.0
fmt.Println(math.Max(num2, num3))
}
1.全局变量
全局变量声明与函数处于同一层级,一般定义在import导包之后,全局声明变量作用域在同一个包内有效。
2.局部变量
局部变量定义一般分为显示类型声明、自动推导和 := 三种,局部变量只能够在同一 {} 作用域内生效,之外就会失效。
3.匿名变量
_ 是匿名变量,也叫哑元变量,不占用命名空间,不分配内存,常用于函数多个返回值时,只需要获取部分返回值的情况使用。
package main
import (
"fmt"
)
func getTwoNums() (int, int) {
return 1, 2
}
func main() {
// 使用匿名变量,从而不分配不需要的变量内存
num1, _ := getTwoNums()
fmt.Println(num1)
}
4.补充
- 全局变量声明之后可以不使用;局部变量声明之后必须要使用,否则会报错。
- := 只能在函数内声明使用(只能定义局部变量);var 不仅可以声明局部变量,也可以声明全局变量。
- 如果全局变量和局部变量定义了同名变量,那么使用该变量时候,会优先使用局部的变量。
package main
import "fmt"
/* 声明全局变量 */
var g int = 20
func main() {
/* 声明局部变量 */
var g int = 10
fmt.Printf ("结果: g = %d\n", g)
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/src/leetcode/main.go"
结果: g = 10
常量定义
常量就是不能改变的量,常用于保证数据安全性,防止运行过程中程序员失误操作改变了该变量,如果尝试去改变常量,那么会编译报错,它必须定义且同时赋值。
package main
import "fmt"
const (
ERRO = 500
// OK不赋值,那么和ERRO值一样
OK
)
func main() {
fmt.Printf("ERRO = %d OK = %d\n", ERRO, OK)
}
iota
iota是常量计数器,在const关键字出现是时候,iota会被置零。iota每新增一行常量赋值,iota的值会自增1。常用于统计声明了多少 行 常量。
package main
import "fmt"
const (
num1 = iota
num2
num3
)
func main() {
fmt.Printf("num1 = %d num2 = %d num3 = %d", num1, num2, num3)
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/src/leetcode/main.go"
num1 = 0 num2 = 1 num3 = 2
声明数量级别
package main
import "fmt"
// 定义数量级
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
)
func main() {
fmt.Printf("KB = %d, MB = %d, GB = %d, TB = %d", KB, MB, GB, TB)
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/src/leetcode/main.go"
KB = 1024, MB = 1048576, GB = 1073741824, TB = 1099511627776