第二章
2.1 变量
- 声明
- 示例:var v1 int
关键字:var 变量名:v1 变量类型:int
- 示例:var v1 int
- 初始化
var v1 int = 10
(var v1 int 这是声明; = 10这是初始化)var v2 = 10
(编译器自动推导数据类型为int)v3 := 10
(利用 := 表示声明和初始化一步完成),注意:出现在 := 左边的变量不能是已经被声明过的。
- 赋值
var v1 int
v1 = 10
- 其余与别的语言基本一致
- 多重赋值
i, j = j, i//一行代码实现两个变量交换
- 匿名变量
- 使得代码的阅读性更好
_, _, nickName := Getname()
//只关注了小名,就可以用匿名变量 _ 来忽略不关注的变量
2.2 常量
- 字面常量
无类型的,可以赋值给任何合适的变量,可以和任何类型比较 - 常量定义
const Pi float64 = 3.1415
const zero = 0.0
const( size int64 = 1024 eof = -1 )
const mask = 1 << 3
//正确,1<<3实在编译器运算的
const Home = os.GetEnv("Home")
//错误, os.GetEnv(“Home”)是在运行期才知道结果的
常量的赋值是一个编译期行为,右值不能出现任何运行期才能得出结果的表达式 - 预定义变量
- iota
在每个const关键字出现时重置为0,之后没出现一次iota就自增1,知道下一次const关键词的出现再次重置为0 - true
- false
- iota
- 枚举
- 不支持enum
const( Sunday = iota Monday Tuesday Wednesday Thursday Friday Saturday numberOfDays )
- 大写字母开头的常量在包外可见,小写字母为包内私有。
2.3 类型
基础类型:布尔、整形、浮点、复数、字符串、字符类型、错误类型
复合类型:指针、数组、切片、字典、通道、结构体、接口
- 布尔
- 不能用0,1给bool类型的变量赋值
- 可以用判断表达式给bool类型的变量赋值
- 整形
- int 和 int32不是同一种类型,不能直接赋值(可以通过强制转换)
- 运算(数值运算、比较运算、位运算(取反:
^x
))
- 浮点型
- float32和C中的float等价
- float64和C中的double等价
- 浮点数的比较需要调用math包中的Abs()函数
import "math"
func IsEqual(f1, f2, p float64) bool{
return math.Abs(f1-f2)<p
}
- 复数类型