Golang - Part02 变量常量和数据类型
Golang - Part02 变量常量和数据类型
数据类型
整数
整数类型按照有/无符号划分,可分为有符号整数和无符号整数,二者按照大小划分,有 8 位、16 位、32 位和 64 位:
大小 | 8 位 | 16 位 | 32 位 | 64 位 |
---|---|---|---|---|
有符号 | int8 | int16 | int32 | int64 |
无符号 | uint8 | uint16 | uint32 | uint64 |
此外,还有两种整数类型,分别是 int 和 uint,其大小与原生的有/无符号整数类型相同,都是 32 位或 64 位。
其中,int32 和 uint8 分别有类型别名是 rune 和 byte,二者可互换使用。需要注意的是,int 和 uint 都有别于大小明确的类型,也就是说,int 和 int32 是两种不同的类型,必须显示转换。
1 | package main |
浮点数
浮点数类型有两种,分别是 float32 和 float64,大多数情况下,建议优先使用 float64,因为 float32 的运算容易产生误差。
1 | var f float32 |
布尔
bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无法隐式转换成数值 0 或 1,反之亦然。
1 | var h bool |
字符串
字符串是不可变的带双引号的字节序列,它可以包含任意数据,包括 0 值字节,不可变意味着多个字符串可以共享一块内存空间。
如图所示,同一块内存空间,包含字符串 s 、字符串 hello 和字符串 world。
字符串操作:
len 函数
内置的 len 函数返回字符串的字节数,并非字符的个数,UTF-8 的简体中文,一个字符占三个字节。
下标访问字符
通过下标访问字符串,可以得到第 i 个字符。
子串生成
子串生成操作 s[i:j] 产生一个新字符串,内容取自原字符串的字节,下标从 i (含边界值)开始,直到 j(不含边界值)。新字符串的大小是 j-i 个字节。
需要注意的是,如果下标越界,或者 j 的值小于 i,将触发宕机异常。
操作数 i 和 j 的默认值分别是 0 [字符串的起始位置]和 len(s) [字符串的终止位置],如果省略 i 或 j,或两者都省略,则取默认值。
字符串连接
加号(+)运算符连接两个字符串而生成一个新字符串。
1 | var i string |
变量
命名规则
Go 中命名规则是,名称以字母或下划线开头,后面可跟任意数量的字符、数字和下划线,字符区分大小写,名称本身没有长度限制,但是 Go 的编程风格倾向于使用短名称,特别是局部变量,Go 中有 25 个关键字,这些关键字不可用来命名。
Go 语言 25 个关键字:
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 |
声明变量
声明变量的通用形式
1
var name type = expression
声明变量的省略形式
1
2var totalScore int
var totalScore2 = 678省略形式声明变量,类型和表达式可以省略其一,但是不能都省略。省略表达式,它的初始值是类型的零值,省略类型,它的初始化表达式决定变量的类型。
声明变量列表
1
2
3var a, b, c int
var d, e, f int = 1, 2, 3
var g, h, i = 3.14, "hello", true声明变量列表,省略类型,以初始化表达式决定变量的类型,允许声明多个不同类型的变量。
调用有返回值函数的形式声明变量
1
2
3
4
5var myname = name("lucy")
func name(name string) string {
var str string = "My name is " + name
return str
}
声明短变量
在函数中,短变量声明用来声明和初始化局部变量。
声明一个整数类型的局部变量:
1
totalScore := 123
声明一个短变量列表:
1
x, y := 1, 2
注意:短变量声明,左侧必须至少声明一个新变量。
指针
指针的值是一个变量的地址。一个指针代表一个变量的值所保存的位置。指针可以在不知道变量名的情况下,读取和更新变量的值。
1 | var x int |
声明一个整型的变量 x,&x 获取一个指向变量 x 的指针,它的类型是整型的指针类型(*int)
1 | z := 3 |
p 是指向 z 的指针,是 z 的地址,它的类型是整型的指针类型(*int),*p 是变量 z 的值,是变量 z 的别名,可以读取和更新变量 z。
指针类型的零值是 nil,指针是可比较的,两个指针只有指向同一个变量,或者都是 nil 的情况下才相等。
常量
常量是一种表达式,常量的计算可以在编译时完成,如果有错误,在编译时就会报错,常量的值不可以修改。
声明常量
1 |
|
声明一组常量,每个常量类型可以不同。
1 |
|
声明一组常量,除了第一个常量之外,其他常量都可以省略表达式,其他常量会复用其前面一个常量的类型和表达式。
1 | const ( |
常量生成器 iota
声明一组常量,可以使用常量生成器 iota,它可以不用逐个常量显示指定类型和赋值表达式,常量声明中,iota 从 0 开始取值,后续常量如果没有显示指定类型和赋值表达式,其值是其前面一个常量的值加 1。直到遇到赋值常量停止加 1,后续如果再遇到赋值 iota 的常量,则继续逐个加 1。
1 | const ( |
无类型常量
1 | const username, age = "lucy", 17 |