1、文件名、关键字与标识符
- Go的源文件以.go为后缀名存储,这些文件名均由小写字母组成,如果文件名由多个部分组成,则是用下划线_对他们进行分隔。文件名不包含空格或其他特殊字符。
- 下面列举了GO代码中会使用到的25个关键字或保留字:
break |
default |
func |
interface |
select |
case |
defet |
go |
map |
struct |
chan |
else |
goto |
package |
switch |
const |
failthrough |
if |
range |
type |
continue |
for |
import |
return |
var |
- 除了上述关键字,Go语言还有36个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数:
append |
bool |
byte |
cap |
close |
complex |
complex64 |
complex128 |
uint16 |
copy |
false |
float32 |
float64 |
imag |
int |
int8 |
int16 |
uint32 |
int32 |
int64 |
iota |
len |
make |
new |
nil |
panic |
uint64 |
print |
println |
real |
recovr |
string |
true |
uint |
uint8 |
uintptr |
2、常量
- 常量使用关键字const定义,用于存储不会改变的数据。
- 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
- 常量的定义格式:const identifier type = value,在Go语言中,你可以省略类型说明符type,因为编译器可以根据变量的值来推断其类型。
- 显示类型定义:const b string = “abc”
- 隐式类型定义:const b = “abc”
- iota可以被用作枚举值:
const (
Unknow = iota //0
Female = iota //1
Male = iota //2
)
- iota也可以用在表达式中,如:iota + 50。在每遇到一个新的常量块或单个常量声明时,iota都会重置为0(简单地讲,每遇到一次const关键字,iota就重置为0)。
3、变量
简介
- 声明变量的一般形式是使用var关键字:var identifier type。
- 当一个变量被生命之后,系统自动赋予它该类型的零值:int为0,float为0.0,bool为false,string为空字符串,指针为nil。记住,所有的内存在Go中都是经过初始化的。
- 当你在函数体内生命局部变量时,应使用简短声明语法 :=,例如: a := 1。
值类型和引用类型
- 在Go语言中,指针属于引用类型,其它的引用类型还包括slices,maps和channel。被引用的变量会存储在堆中,以便进行垃圾回收,且比栈拥有更大的内存空间。
简短形式,使用 := 赋值操作符
- 这是使用变量的首选形式,但是它们只能被用在函数体内,而不可以用于全局变量的生命与赋值。使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。
- 如果你声明了一个局部变量却没有在相同的代码块中使用它,会得到编译错误,但是全局变量是允许声明但不使用。
- 多个变量可以在同一行进行赋值,这被称为并行或同时赋值,如:
a,b,c = 5, 7, "abc"
- 如果你想交换两个变量的值,则可以简单的使用a, b = b, a 。
- 空白标识符_也被用于抛弃值,如值5在: _, b = 5, 7 中被抛弃。
init函数
- 变量除了可以在全局声明中初始化,也可以在init函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比main函数高。
- 每个源文件都只能包含一个init函数,初始化总是以单线程执行,以保证程序状态的正确性: