Go语言入门之变量、常量、指针以及数据类型
1.变量的声明和定义
var 变量名 变量类型
// 声明单变量
var age int // 定义int类型的年龄,初始值为0
// 声明多变量
var a, b int = 1, 2
// 声明变量不写数据类型可以自动判断
var a, b = 123, "hello"
// 变量声明另一种方式(只能声明局部变量)
a, b := 123, "hello" // 既声明又赋值,如果之前声明过再用这个则会报编译错误
// 交换相同类型变量的值
a, b = b, a
// 声明全局变量
var (
a int
b bool
)
// 假设有个numbers的函数返回了三个值,获取返回值的后两个
_,numb,strs := numbers()
fmt.Println(numb,strs)
注意:
- 除全局变量外的其他变量声明后必须使用,否则会编译错误。
- 当局部变量和全局变量名称相同时,会优先考虑局部变量
2.常量
变量定义后经过初始化便为常量,常量只有布尔,整型,浮点型,底层类型这些类型定义
Go语言常量特点
- 支持无类型常量(定义常量时不指定类型)
- 支持隐式类型转换
- 可用于实现枚举
(1)常量的定义
Go语言引入
const
关键字来声明变量
const a int = 1 // 正常定义
canst b = 2 // 无类型常量 定义后会通过隐式转换转为初始值对应的类型int
(2)常量生成器(枚举)
iota // 从0开始加1
例子:
// 显示奇数
const (
a = 2*iota + 1
b
c
d
e
f
)
fmt.Println(a, b, c, d, e, f)
// 输出:1 3 5 7 9 11
3.指针
指针是一个变量,其值是另一个变量的内存地址
必须要先声明一个指针,然后才能使用它来存储任何变量地址
var p *int // var 指针名 指针类型 未初始化默认值为nil
指针的操作
&
是取地址操作符*
是取值操作符*数据类型
是指针类型
var ptr *int // 定义指针,未初始化
a := 10 // 定义整型10
ptr = &a // 将a赋值给ptr
fmt.Println(ptr) // 打印的是指针地址:0xc00000a0a8
fmt.Println(*ptr) // 打印的是指针指向的地址值:10
*ptr = 20
fmt.Println(a) // 打印的是a的原地址值,已被指针修改,结果为:20
指针未初始化取值会报错
// 声明指针 此时a为nil
var a *int
// 这会报错,原因是此时a的值是nil,系统访问不到nil的地址值,
// 我们需要将指针重新指向一个变量,或者为指针重新开辟地址
*a = 10
解决方案:
- 1.用
new
在内存中申请一个地址 - 2.重新赋予其其他变量的地址
var a *int
// 初始化后的内存空间 其值为对应类型的零值
a = new(int)
*a = 10
fmt.Println(*a) // 打印10
var ptr *int // 定义指针,未初始化
b :=