#背景
Go 语言和其他的语言一样,庞大的程序都是由小的基本组件构建而来:
- 变量:存储值
- 表达式:通过 + - 等操作合并成大的
- 基本类型:通过数组和结构体进行聚合
- 表达式:通过 if 和 for 等控制语句来决定执行顺序
- 语句:被组织成函数,用于隔离和复用
- 函数:被组织成源文件和包
#名称
Go 语言有 25 个关键字,不可用作名称:
- break、default、case、else、goto、switch、if、for、continue:用于流程控制
- func:用于定义函数和方法
- interface:用于定义接口
- select:用于选择不同类型的通讯
- defer:在函数退出之前执行
- go:用于并行
- map:用于声明 map 类型
- struct:用于定义抽象数据类型
- chan:用于 channel 通讯
- package:用于定义包
- const:用于定义常量
- fallthrougth:在 switch 中每一个分支结束后可以使用,执行下一分支
- range:用于读取 slice、map、channel 数据
- type:用于声明自定义类型
- import:用于导入包
- return:用于函数返回
- var:用于定义变量
Go 语言还有 三十几个内置的与声明的常量、类型和函数:
- 常量:
- ture, false :布尔值
- iota:iota 在 const 关键字出现时被重置为 0,const 中每新增一行常量声明将 iota 计数一次
- nil:表示某个变量为空
- 类型:
- int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:整型
- uintptr:指针
- float32, float64:浮点型
- complex128, complex64:复数型
- bool:布尔型
- byte, rune:字符型。byte 对应 UTF-8,rune 对应 unicode
- string:字符串型
- error:错误型
- 函数:
- make:返回 Type 本身(只能应用于 slice, map, channel)
- len:返回长度
- cap:返回容量
- new:返回指向 Type 的指针
- append:把东西增加到 slice 里面,返回修改后的 slice
- copy:赋值 slice,返回赋值的数目
- close:关闭 channel
- delete:从 map 中删除 key 对应的 value
- complex:
- real:返回 complex 的虚部
- imag:返回 complex 的实部
- panic:停止常规的 goroutine
- recover:允许程序定义 goroutine 的 panic 动作
Notice:
- 若一个实体在函数中声明,那它只局部有效
- 若一个实体在函数外声明,那它将对包内的所有源文件可见
- 其中,实体的第一个字母的大小决定其可行性是否跨包。若名称以大写字母开头,则它是可导出的,对包外是可见和可访问的。包本身总是以小写字母组成。
- 当遇到有单词组合的名称时,Go 程序员采用驼峰式风格
#声明
声明给一个程序实体命名,并设定其部分或全部属性。有 4 个主要的声明:
- 变量(var)
- 常量(const)
- 类型(type)
- 函数(func)
Example:以一个实例分别介绍 4 个主要的声明。
// 每一个文件以 package 声明开头,表明文件属于哪个包
package main
// import 导入包
// 形式:
// import ( "包名 1"
// "包名 2"
// ...
// )
import ("fmt"
)
// 定义常量 boilingF
// 当定义不位于函数内,则为包级别的声明
// 常量定义方式:
// const 常量名 = 常量值
const boilingF = 212.0
// 定义 main 函数
func main(){
// 定义变量 f, c
// f,c 均是 main 函数的局部变量
var f, c float64
f = boilingF
c = fToc(f)
PrintfBoilingPoint(f, c)
}
// 定义 fToc 函数
// 返回类型为 float64
// 输入参数为 float64 类型的 f
// 函数定义形式:
// func 函数名(传参名称 传参类型) 返回类型 {
// 函数内容
// }
func fToc(f float64) float64 {
return (f - 32) * 5 / 9
}
// 定义printfBoilingPoint
// 无返回类型
// 输入参数为 float64 类型的 f 和 c
func PrintfBoilingPoint(f float64, c float64) {
// 函数名的首字母为大写,表明此函数为包外可见函数
// 由此可见,自定义函数 fToc 为包外不可见函数
// PrintfBoilingPoint 为包外可见函数
// 调用包外函数的格式:
// 包名.函数名(参数列表)
fmt.Printf("boling point = %g °F or %g °C\r\n", f, c)
}