变量/常量
- 基本类型:数字类型、bool、string
- 结构化类型:struct、array、slice、map、channel
- 只描述类型的行为:interface
- 变量声明方式
var a string var b = 1 c := false var ( d = 10 e string ) - const 用来定义常量,且仅限布尔型、数字型(整数型、浮点型和复数)和字符串型
- 常量的值必须是能够在编译时就能够确定的
- 编译期间自定义函数均属于未知,因此无法用于常量的赋值,但内置函数可以使用
- 常量的值无法被改变,如果编译时发现代码中试图修改常量的值则会引发编译错误
- iota 可以被用作枚举值,简单地讲,每遇到一次 const 关键字,iota 就重置为 0
- var 声明变量时,变量类型在名称之后
- 当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil
- 如果你的全局变量希望能够被外部包所使用,则需要将首个单词的首字母也大写
- golang变量的作用域简单点可以分为:
- 全局变量,在整个包甚至外部包(被导入后)都可使用
- 局部变量,在函数内定义的变量,包括参数和返回值
- 代码块内,if,for等一些{}分割的代码块内声明的变量
- 在 golang 中也可进行如 python 相同的变量置换操作,但是两个变量的类型必须相同
a := "这是a" b := "这是b" a, b = b, a
数字类型
与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来 整数:
- int8(-128 -> 127)
- int16(-32768 -> 32767)
- int32(-2,147,483,648 -> 2,147,483,647)
- int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
无符号整数:
- uint8(0 -> 255)
- uint16(0 -> 65,535)
- uint32(0 -> 4,294,967,295)
- uint64(0 -> 18,446,744,073,709,551,615)
浮点型(IEEE-754 标准):
- float32(+- 1e-45 -> +- 3.4 * 1e38)
- float64(+- 5 * 1e-324 -> 107 * 1e308)
复数
- complex64 (32 位实数和虚数)
- complex128 (64 位实数和虚数)
init 函数
- 不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高
- 每个源文件都只能包含一个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行
- 可用在开始执行程序之前对数据进行检验或修复,以保证程序状态的正确性
运算符
优先级
优先级 运算符
7 ^ !
6 * / % << >> & &^
5 + - | ^
4 == != < <= >= >
3 <-
2 &&
1 ||