变量是任何一门编程语言的基础,每一门语言的变量定义风格也不尽相同,我们来看看 Go 语言定义变量的方式。
全局变量
Go 语言中使用 var 关键字定义全局变量,格式为:
var variableName type = value
// 注意同 C 和 Java 不一样的是,Go 语言把变量类型放在了变量名的后面
var a int = 1
// 并行定义多个全局变量
var a, b, c int = 1, 2, 3
// 具有初始值的变量定义可以省略类型
var a, b, c = 1, 2, 3
// 全局变量可以使用简写
var (
a = "hello"
b = true
c = 3
// a, b, c = 1, 2, 3
)
局部变量
在方法体内,我们可以把 var 关键字省略,变成 :=
形式,它表示变量的「自动类型推导 + 赋值」
package main
import "fmt"
func main() {
a := 1
fmt.Println(a)
}
// 1
// 我们注意一个特殊的变量 _(下划线),上一节中也有说到,其实 _ 用在方法体内作为方法返回值的接收是最常见的用途
func main() {
a, _ := 1, 3
fmt.Println(a)
}
// 3被抛弃
全局变量和局部变量的使用看业务,一个变量多处使用可以使用全局变量,如果只是方法体内或者循环判断里用得到那就直接用局部变量即可。
如果全局变量的首字母大写,那么它就是公开的全局变量,也叫公有变量;如果全局变量的首字母小写,那么它就是内部的全局变量,也叫私有变量。内部的全局变量只有当前包内的代码可以访问,外面包的代码是不能看见的。
常量
Go语言提供了常量关键字 const,特征是不可修改,定义时必须初始化。
const a int = 1
// 支持同时设置多个常量
const (
a = "hello"
b = true
c = 3
)
以上,Go 语言的三种变量就简单介绍完了,接下来我们看看 Go 语言有哪些类型
Go常见类型
布尔型:bool
长度为1字节,取值范围:true,false,注意不可以用数字代替
整型:int / uint
会根据系统决定是32位还是64位,从而决定占4字节还是8字节;int 表示有符号整数,可以表示正负;
uint 表示无符号整数,只能表示非负整数
8位整型:int8 / uint8
长度为 1 字节,取值范围:-128~127 / 0~255;
取值范围计算: 比如 int8 ,取值范围就是 2^8 = 256,然后正负各一半,中间有个0,
所以范围是 -128 ~ 127;uint8 也是这么算,只不过没有负数,从0开始,所以范围是 0 ~ 255。
16位整型:int16 / uint16
长度为 2 字节,取值范围:-2^15 ~ 2^15-1 / 0 ~ 2^16-1
32位整型:int32 / uint32
长度为 4 字节,取值范围:-2^31 ~ 2^31-1 / 0 ~ 2^32-1
64位整型:int64 / uint64
长度为 8 字节,取值范围:-2^63 ~ 2^63-1 / 0 ~ 2^64-1
字符串类型:string
字节型:byte(uint8 的别名)
长度为 1 字节,取值范围:0~255
字符型:rune(int32 的别名)
长度为 4 字节,取值范围:0~255,用于存放 Unicode 码点
浮点型:float32 / float64
长度为 4/8 字节,小数点位置:7/15 位小数,默认是float64
负数:complex64 / complex128
长度为 8/16 字节,这个基本用不上吧。。。
指针类型:uintptr
可以保存指针的无符号整数型,根据操作系统决定32位还是64位
引用类型:slice / map / chan
这三者是需要通过 make 来创建才能使用
其他:array、struct、func、interface、error
上述罗列了 Go 语言中的类型,需要注意的一点是,这些类型的变量之间不允许互相赋值或操作,不然会在编译时引起编译器报错。比如:
func main() {
var a int
var b int8
c := a + b
}
// invalid operation: a + b (mismatched types int and int8)
另外,Go 的字符串可以理解为字节串,由于 Go 采用 UTF-8 编码,一个英文占一个字节,一个中文占3个字节,所以无法直观的定位某个字符,从而引申出字节型 byte 和字符型 rune,这个后续再展开讨论。
类型零值
接下来看看类型的零值。这里零值不等于空值,而是变量声明后的默认值;通常情况下分为以下几种
值类型: 0
布尔型: false
字符串: ""
Go 关键字
这里实名表扬一下,Go 的关键字比 Java 等其他语言少太多了~ 不用记住,混个眼熟就行
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
iota枚举
Go 语言内置了一个特殊的关键字 iota,这个关键字用来声明enum的时候采用,它默认开始值是0,后续每增加一行加1,下面看下代码实现
// 只要第一个声明了 iota,后续的变量会自动累加
// iota 在同一行值相同
const (
a = iota //a=0
b = "bbb"
c = iota //c=2
d, e, f = iota, iota, iota //d=3,e=3,f=3
g = iota //g = 4
)
本章小结
这一节主要是讲了 Go 语言中三种变量以及变量的不同定义方式;接下来了解了 Go 语言的类型系统,除了常见的基本类型还简单介绍了一些扩展类型以及类型的零值等,这里先混个眼熟,后面我们用得上的时候再去研究;后面捎带了一下 Go 的关键字 和 iota 枚举。下一节我们开始学习 Go 语言的循环控制流,这一节很简单,比你学的其他语言都简单~
网友评论