1、变量概念
变量概念源于数学,在计算机中表示用来存储值或者存储计算结果的抽象概念。
变量本质上是一种对内存地址的引用,让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字进行操作。
2、变量的声明
和C语言一样,Go语言也是通过关键字 var进行声明变量,不同的是变量名放在类型的前面,具体格式如下:
var 变量名 数据类型
例如:
package mainimport "fmt"func main(){var x int //声明变量并赋值后,在后面的必须使用,不然会报错var y intvar b boolfmt.Println(x) //0fmt.Println(y) //""fmt.Println(z) //false}
声明未赋值,系统默认赋这些类型零值。也就是说变量的值默认为 false。
Int 类型,当 为 0 的时候表示 false。String 类型,当为 "" 的时候表示falseBool 类型,当为 fasle的时候表示 false
3、声明多个变量
如果声明多个变量,可以进行简写
// 声明多个相同类型变量var x, y int// 声明多个不同的类型变量var (x inty stringz bool)
4、变量赋值
// 先声明再赋值var x intx = 100fmt.Println(x) //必须被使用,不然会报错// 直接声明赋值var name = "shuaigaogao" //编译器会自动识别数据类型fmt.Println(name)// 声明赋值精简版name := "hello world"fmt.Println(name)
- 编译器会自动根据右值类型推断出左值的对应类型,等同于var s = “hello word!”。
- 该变量之前不能声明,否则重复声明
// 赋值多个变量var a,b inta,b = 10,20fmt.Println(a,b)// 一行赋值多个变量var a,b,c = 100, "hello world", truefmt.Println(a,b,b)// 一行赋值多个变量,推荐name,age := "hello world", 22fmt.Println(name,age)// 多行赋值多个变量var (a = 100b = "hello world"c = true)fmt.Println(a,b,c)
5、匿名函数
匿名变量即是没有命名的变量,在使用多重赋值时,如果你想忽略某个值,可以使用匿名变量(anonymous variable)。匿名变量用一个 下划线(_)表示。
// 正常变量赋值a,b,c := 4,5,6fmt.Println(a,b,c)// 如果只想接受最后一个值,可以对前面两个变量匿名_,_,x = 4,5,6 // 匿名变量是不可以被使用的,因为压根都不会分配内存给它。fmt.Println(x)
- 匿名变量不占用命名空间,不会分配内存
- 让代码非常清晰,基本上屏蔽掉了可能混淆代码阅读者视线的内容,从而大幅降低沟通的复杂度和代码维护的难度。
6、变量的命名规范
变量命名是需要遵循一定的语法规范,否则编译器不会通过。
1. 变量名称必须由数字、字母、下划线组成。2. 标识符开头不能是数字 eg:错误 1a := 10 正确:a1 := 103. 标识符不能是保留字 或 关键字。4. 建议使用驼峰标式命名,当名字有几个单词组成的时优先使用大小写分割 eg: companyName := "h"5. 变量名尽量做到见名如意。6. 变量名区分大小写。 eg: a := 10 这个 a 和 A 不是同一个变量。
go语言中有 25 个关键字,是不能用于自定义变量名:
break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return var
还有30多个预定义的名字,用于内建的常量、类型和函数。
//内置常量true false iota nil//内建类型int int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptrfloat32 float64 complex128 complex64bool byte rune string error// 内置函数:make len cap new append copy close deletecomplex real imagpanic recover
