Parts of A Tour Of Go
包
每个Go
程序都是由包构成的。Go
程序从main
包开始运行。
1 | package main |
本程序通过导入路径"fmt"
和"math/rand"
来使用这个两个包。
按照约定,包名与导入路径的最后一个元素一致,例如:"math/rand"
包中的源码均以package rand
语句开头。
导入
1 | package main |
分组导入
1 | import ( |
多个导入语句
1 | import "fmt" |
推荐使用分组导入的形式
导出名
在Go
中,如果一个命名是以大写字母开头的,那么它就是已导出的。
在导入一个包时,只能引用其中已导出的命名。任何“未导出”的名字在该包外均无法引用。
1 | package main |
函数
函数可以没有参数或接受多个参数
1 | package main |
多值返回
函数可以返回任意数量的返回值
1 | package main |
命名返回值
Go
的返回值可以被命名,他们会被视作定义在函数顶部的变量。
命名应当有意义。
没有参数的return
语句返回已命名的返回值-(直接返回)。
直接返回语句应当较短的函数中,函数较长中的直接返回会影响代码可读性。
1 | package main |
变量
var
关键字用于声明一个变量列表,跟函数的参数列表一样,变量类型放在最后面。
1 | package main |
var
既可以在函数外使用,也可以在函数内使用
变量初始化
变量声明的时候可以包含初始值,每个变量对应一个。
如果初始值存在,可以省略变量类型,变量会从初始值中获得类型。
1 | package main |
短变量声明
在函数中,可以使用简洁的赋值语句:=
代替var
声明。
1 | package main |
函数外的每个语句都必须以关键字开头,因此:=
结构只能在函数内使用。
变量分组声明
1 | package main |
同导入语句一样,变量声明也可以分组
成一个语法块。
基本类型
当需要一个整数时,请使用int
,除非有特殊的理由。
常用类型
Type | Desc | Default |
---|---|---|
bool |
布尔 | false |
string |
字符串 | ""(空字符串) |
int |
整数(size 由系统位数决定) |
0 |
其它基本类型
- int8
- int16
- int32
- int64
- uint // 与
int
一样,size
由系统位数决定 - uint8
- uint16
- uint32
- uint64
- uintptr // 与
int
一样,size
由系统位数决定 - byte //
uint8
的别名 - rune //
int32
的别名,表示一个Unicode
码点 - float32
- float64
- complex64
- complex128
零值
没有明确初始值的变量声明会被赋予零值
。
1 | package main |
类型转换
表达式T(v)
将值v
转化为类型T
。
1 | package main |
与C
不同的是,Go
在不同类型的变量之间赋值时需要显式转换(否则编译不通过)。
类型推导
当声明一个变量而不指定类型的时候(x := 123
OR var x = 123
),变量的类型由右值推导得出。
1 | package main |
常量
- 常量的声明与变量类型,只不过是使用
const
关键字 - 常量可以是字符、字符串、布尔值或数值
- 常量不能用
:=
语法声明 - 声明常量的同时必须进行初始化,其值不可再次修改
- 常量在编译期被创建,因此常量在编译期必须能确定其值
1 | package main |
数值常量
一个未指定类型的常量由上下文来决定其类型。
1 | package main |