Go 语言之基础语法| 青训营笔记

84 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 语言的海洋中遨游吧