在本系列的上一篇文章中, 介绍了在Windows 环境中如何安装和配置 Go 的开发环境。在本文中,我们将介绍 Go 语言中的变量及数据类型。
Go 程序的基本结构
Go 程序由一个或多个以 .go 为后缀的文件组成。每个文件以 package 声明开头,表明该程序逻辑上属于那个包。 package 声明后是 import 声明,然后就是包级别的类型、变量、常量和函数声明,不区分顺序。 来看下面的例子:
1 | package main |
在例子中,声明了一个常量和一个变量,都是包级别的。这一点和后台开发人员熟悉的 Java 语言不同,Java 变量和常量的定义都必须放在类或接口中。
变量定义的语法
1 | var <variable_name> [varialbe_type] [= expression] |
以 var 关键字开头,变量名(variable_anme)是必须的, 类型声明为可选, 等号及后面的初始值表达式也是可选的。 如:
1 | var age1 int |
以上三种定义方式都是正确的。第一种明确给出了数据类型,第二种给出了数据类型还给了正确的类型的初始值,第三种没有明确给出数据类型,但通过初始值,系统可以进行类型推断。
如果这样定义,就是不正确了,因为系统无法推断 age4 的数据类型。
1 | var age4 |
Go 运行一次定义多个变量, 如下:
1 | var age1, age2 int |
实际上,在一行声明中,还可以包括不懂类型的变量,比如:
1 | var title, completed = "task1", false |
短变量声明
在函数内部,声明局部变量时,可以使用以下的格式:
1 | variable_name := expression |
也就是直接定义一个变量并赋初值,注意,这样了用的是 :=, 而不是 =
类型系统
Go 语言中类型系统如下图所示:
基本数据类型说明
整数类型
无符号整数
uint – 32位或64位
uint8 – 无符号 8 位整型 (0 到 255)
uint16 – 无符号 16 位整型 (0 到 65535)
uint32 – 无符号 32 位整型 (0 到 4294967295)
uint64 – 无符号 64 位整型 (0 到 18446744073709551615)有符号整数
int – 32位或64位
int8 – 有符号 8 位整型 (-128 到 127)
int16 – 有符号 16 位整型 (-32768 到 32767)
int32 – 有符号 32 位整型 (-2147483648 到 2147483647)
int64 – 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
byte – uint8的别名(type byte = uint8)特殊整型
rune – int32的别名(type rune = int32),表示一个unicode码
uintptr – 无符号整型,用于存放一个指针是一种无符号的整数类型,没有指定具体的bit大小但是足以容纳指针。uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
浮点型
float32 – IEEE-754 32位浮点型数
float64 – IEEE-754 64位浮点型数
complex64 – 32 位实数和虚数
complex128 – 64 位实数和虚数
字符串
注意: Go 中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。 与大多数语言一样,字符串是不可变的。