基础概念
1、每个go文件必须属于一个package
(package是位于同一目录中的源文件的集合)
2、go程序的入口是main()函数
3、包含main() function的package必须声明为package main
创建一个Go program
1、Create a new directory (e.g. go_project)
2、在这个目录下创建main.go文件
3、代码行
package main
import "fmt"
func main() {
fmt.Println("Hello, go!")
}
4、输入指令
go run main.go
5、查看代码输出
Import Packages
A Go program can import other packages
上面的例子就是,imported a built-in Go package, fmt
实现输出功能
Primitive Data Types
Variables
变量的类型可以直接声明,也可以不声明推断
Type Conversion
类型转换
Constants
定义常量
Conditionals
条件语句
解析器只识别K&R brace-style大括号样式
在go中,if-else语句不需要括号括住条件
For Loop
迭代数字
类似于其他 语言中的while循环
无限循环
获取列表中的每个元素的索引和值
Scope
Inner Code Blocks c可以访问Outer Code Blocks中定义的变量,反之不成立
Strings
字符型类型可读不可修改
Character Encoding
字符编码,中文
Rune
字符编码,数字
Array
同类型元素固定大小、有序的集合
Slice
提取一系列元素,构建在底层数组之上,可以动态调整大小
修改Slice也会修改它指向的底层数组
在Slice里添加数
Map
Functions
定义一个方法函数并引用
Structures
不同于其他语言,go是structure不是class
Copying of Structs
复制不会影响原版
Methods
在function函数里用structure
Pointers
指针存储指向实际值的内存地址
通过指针修改值
Modifying Values via Pointers
引用
Pass By Value
Pass By Reference
Interfaces
定义一组方法
Composition (Embedding)
重用现有结构的字段和方法,不是用继承
Coroutines
协程是单个process内的轻量级并发执行路径,允许我们同时执行多项任务
WaitGroup
提供等待Coroutines集合完成的方法
不需要计时器,wg.Wait()会等两个Coroutines完成
Channels
提供在Coroutines之间传递值(先进先出顺序)的机制