这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
01. Go 语言变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用var关键字:
var variable type
可以一次声明多个变量:
var variable_1, variable_2 type
1.1 变量声明
第一种,指定变量类型,如果没有初始化,则默认为零值
var v_name v_type
v_name = value
- 数值类型(包括complex64/128)为 0
- 布尔类型为 false
- 字符串为 ""(空字符串)
- 以下几种类型为 nil:
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error// error 是接口
第二种,根据值自行判定变量类型
var v_name = value
第三种,如果变量已经使用var声明过了,再使用:=声明变量,就会产生编译错误
var intVal int
intVal :=1 // 这时候会产生编译错误,因为 intVal 已经声明,不需要重新声明
直接使用下面语句即可:
intVal := 1// 此时不会产生编译错误,因为有声明新的变量,因为 := 是一个声明语句
1.2 多变量声明
//类型相同多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断
vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
// 这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
赋值操作符 :=
我们知道可以在变量的初始化时省略变量的类型而由系统自动推断,声明语句写上 var 关键字其实是显得有些多余了,因此我们可以将它们简写为 a := 50 或 b := false。
a 和 b 的类型(int 和 bool)将由编译器自动推断。
这是使用变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。
02. Go 语言常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
常量的定义格式:
const identifier [type] = value
与上述相同。也可省略类型说明符 [type], 因为编辑器可以根据变量的值来推断其类型。
-
显式类型定义:
const b string = "abc" -
隐式类型定义:
const b = "abc"
常量还可以用作枚举:
const (
Unknown = 0 // 未知性别
Female = 1 // 女性
Male = 2 // 男性
)
常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过
iota
特殊常量,可以认为是一个可以被编译器修改的常量。
- iota 是 Go 语言的常量计数器,只能在常量的表达式中使用
- iota 在 const 关键字出现时将被重置为 0 。const 中每新增一行常量声明将使 iota 计数一次( iota 可理解为 const 语句块中的行索引)。使用 iota 能简化定义,在定义枚举时很有用
总而言之,Go语言简单容易学习、开发效率高、性能好,或者说天生支持高并发。
如果你是 Python 和动态语言狂热爱好者,Go 不一定能给你带来很大的惊喜,这纯粹取决于你得项目性质,考虑到 Python 目前在很多地方都用 C 做核心运算,速度在大部分情况下都不是大问题
如果你是 C 爱好者,强烈建议你学习和使用 Go。Go 可以调用 C/C++ 程序,又提供了太多的便利,速度上稍有牺牲,但并不大。
最后,让我们扬帆起航,一起在 Go 语言的海洋中遨游吧