Go(Golang)_03_变量
@
变量管理
变量:存储指定值或计算结果的特殊字符
1)变量的声明格式分为:var关键词声明、短变量声明
2)Go中类型转换格式:数据类型(被转换对象)
3)Go中不存在未初始化的对象
类型转换需注意:
1)interface{}数据类型转换方式为:被转换对象.(数据类型)
2)int类型转换为string类型时会转化为ASCII对应符号(应使用strconv包)
3)string类型和[]byte类型互相转换(但string转换为[]byte时需指定元素个数)
Go中仅声明变量而不进行初始化时,编译器会将其初始化为对应类型的零值
变量类型 | 零值 |
---|---|
数 | 0 |
字符串 | 空字符串 |
布尔 | false |
指针 | nil |
引用 | 底层数据结构初始化为对应类型的零值 |
声明为零值的引用 | nil |
//声明:仅创建而未初始化(定义:创建的同时进行初始化)
//不可对仅声明的指针进行赋值操作
var关键词
var关键词:通过var关键词声明/定义对象
1)可同时定义多个对象(用“,”分隔);
//也可在var关键词后紧跟()中同时定义多个对象
var 对象名 数据类型 = 初始值
1)若省略数据类型,则对象的类型默认和初始值的数据类型相同;
2)若省略初始值,则默认初始化未对应类型的零值;
3)数据类型和初始值不可同时省略;
如:通过结构字面量声明定义多个变量,并输出其值
1)编写程序;
2)运行结果;
//同时定义多个对象的形式一般用于接收返回多个值的函数
短变量
短变量声明(:=):Go中同时创建和初始化对象的特殊符号
1)短变量声明中必须指定初始值(用于确定其对象的类型);
2)短变量声明作用于已声明的对象时,会重新声明对象;
3)短变量声明可同时作用于多个对象(“,”分隔);
短变量声明使用格式:
对象1, 对象N := 初始值1, 初始值N
使用短变量声明须知:
1)短变量声明不可仅用于赋值操作,会导致pain;
2)短变量声明用于不同作用域下可能导致创建同名变量;
3)短变量声明左侧必须具有新变量(全部重新声明会导致panic);
4)短变量声明仅能用于函数中(不能用于声明和初始化全局对象);
如:通过短变量声明同时定义两个变量,并输出其值
1)编写程序;
package main
import (
"fmt"
)
func main() {
num, str := 2022, "yes" // 编译器根据值决定对象的数据类型
if true {
str, word := 2022, "no" // 作用域不同导致同名变量
fmt.Println(str, word)
}
fmt.Println(num, str)
}
2)运行结果;
常量
常量:程序的整个运行周期内保持不变的变量
1)所有常量的数据类型都必须是基础类型;
2)常量一般定义在包级别,且公开的;
常量的定义格式:
const 常量名 = 初始值/表达式
1)常量的数据类型由其初始值/表达式判定;
2)若定义多个常量,可在紧跟const关键词后的()中定义;
3)也可通过常量生成器(iota)指定其常量值(实现枚举效果);
常量生成器(iota):根据常量声明块中代码所处行数进行取值
1)iota的初始默认值为0,可通过加法/移位改变;
2)若使用iota指定表达式且后续无表达式,则会继承该表达式;
如:使用iota在常量声明块中根据表达式指定值
1)编写程序
package main
import (
"fmt"
)
func main() {
const (
bit0, mask0 = 1 << iota, 1<<iota - 1
bit1, mask1
_, _
bit3, mask3
)
fmt.Println(bit0, mask0)
fmt.Println(bit1, mask1)
fmt.Println(bit3, mask3)
fmt.Println(finally)
}
2)运行结果;