文章目录
变量
变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)。
变量声明的方式
- 指定变量类型。声明后若不赋值,则使用指定数据类型的默认值
package main
import "fmt"
func main() {
var num int
fmt.Println("num =", num)
}
结果:num = 0
int数据类型的默认值是0
,其他的稍后介绍
- 根据初值自行判定变量类型(类型推导)
package main
import "fmt"
func main() {
var num = 10.1
fmt.Println("num =", num)
}
结果:num = 10.1
- 省略
var
关键字,用:=
声明并赋初值
package main
import "fmt"
func main() {
num := 10
fmt.Println("num =", num)
}
结果:num = 10
- 局部多变量声明
package main
import "fmt"
func main() {
// 一次声明多个变量
var n1, n2, n3 int
fmt.Println("n1 =", n1, "n2 =", n2, "n3 =", n3)
// 一次声明多个变量并赋初值
var a, name, b = 100, "张三", 300
fmt.Println("a =", a, "name =", name, "b =", b)
// 简写
i, j := 10, 20
fmt.Println("i =", i, "j =", j)
}
结果:
n1 = 0 n2 = 0 n3 = 0
a = 100 name = 张三 b = 300
i = 10 j = 20
- 全局多变量声明
package main
import "fmt"
// 一次声明多个全局变量
var (
a = 100
b = 200
name = "李四"
)
func main() {
fmt.Println("a =", a, "b =", b, "name =", name)
}
结果:a = 100 b = 200 name = 李四
变量使用的注意事项
- 变量的值可以在同一类型和范围内不断变化
- 变量在同一作用域内不能重名
- 变量的三要素:变量名、变量值、数据类型
- Go中的变量如果没有赋初值,编译器会使用默认值。比如
int
型默认值为0
,string
型默认值为空串
声明全局变量的坑
我们可以在函数内部使用变量声明的简写方式,比如
a := 10
,但这条语句不能写在函数外部,也就是全局,因为这条语句相当于两条语句:var a int
与a = 10
,而在全局中是不允许有赋值语句的。
数据类型
Go的数据类型分为基本数据类型和派生/复杂数据类型。
- 基本数据类型:
bool
string
int
、int8
、int16
、int32
、int64
uint
、uint8
、uint16
、uint32
、uint64
、uintptr
byte
(uint8
的别名)rune
(int32
的别名,表示一个Unicode
码点)float32
、float64
complex64
、complex128
- 派生/复杂数据类型:
指针pointer
数组array
结构体struct
管道channel
函数function
切片slice
接口interface
map
整型类型的说明
类型 | 有无符号 | 占用存储空间 | 表示范围 | 备注 |
---|---|---|---|---|
int8 |
有 | 1字节 | -128 ~ 127 | |
int16 |
有 | 2字节 | -215 ~ 215-1 | |
int32 |
有 | 4字节 | -231 ~ 231-1 | |
int64 |
有 | 8字节 | -263 ~ 263-1 | |
uint8 |
无 | 1字节 | 0 ~ 255 | |
uint16 |
无 | 2字节 | 0 ~ 216-1 | |
uint32 |
无 | 4字节 | 0 ~ 232-1 | |
uint64 |
无 | 8字节 | 0 ~ 264-1 | |
int |
有 | 32位系统占4个字节,64位系统占8个字节 | -231 ~ 231-1,-263 ~ 263-1 | 默认 |
uint |
无 | 32位系统占4个字节,64位系统占8个字节 | 0 ~ 232-1,0 ~ 264-1 | |
rune |
有 | 与int32 一样 |
-231 ~ 231-1 | 等价int32 ,表示一个Unicode 码 |
byte < |