第一章 go语言
-
语言特性
- 开放源代码
- 静态类型和编译型
- 跨平台
- 自动垃圾回收
- 原生的并发编程
- 完善的构建工具
- 多编程范式
- 代码风格强制统一
- 高效的编程和运行
- 丰富的标准库
-
安装和设置
- API文件夹:依照GO版本顺序的API增量列表文件
- bin文件夹:主要的标准命令文件,包括(go/godoc/gofmt)
- blog文件夹:官方博客文章
- lib文件夹:特殊库文件
- misc文件夹:辅助类的说明和工具
- pkg文件夹:安装Go标准库后的所有归档文件
- src文件夹:存放Go自身、Go标准工具以及标准库的所有源码文件
- test文件夹:测试和验证Go本身的所有相关文件
-
工程结构
- src目录:用于以代码包的形式组织并保存Go源码文件
- pkg目录:用于存放通过go install命令安装后的代码包的归档文件
- bin目录:保存由Go命令源码文件生成的可执行文件
-
标准命令简述
- go工具包子命令
build :编译指定Go语言源码文件
cleam :清除执行go命令遗留下来的临时目录和文件
doc :Go语言代码包以及程序实体文档
env :打印GO语言相关的环境信息
fix :修正指定代码包的源码文件和包含的过时语法和代码调用
fmt :格式化指定代码包中的GO源码文件
generate :识别指定代码包中源码文件的go:generate注释
get :用于下载、编译并安装指定的代码包及依赖包
install :编译并安装指定的代码包及其依赖包
list :显示指定代码包的信息
run :编译并运行指定的命令源码文件
test :测试指定的代码包
tool :运行Go语言的特殊工具
vet :检查指定代码包中的Go语言源码
version :显示当前安装的GO语言的版本信息及计算环境
tool pprof:用于以交互的方式访问一些性能概要文件
tool trace:用于读取Go程序踪迹文件,并以图形化的方式展示出来
- go程序示例
package main
import(
“bufio”
“fmt”
“os”
)
func main(){
inputReader :=bufio.NewReader(os.Stdin)
fmt.Println("Please input your name :")
input,err :=inputReader.ReadString('\n')
if err !=nil {
fmt.Printf("Found an error :%\n",err)
}else{
input = input[:len(input)-1]
fmt.Prinf("Hello,%s!\n",input)
}
}
第二章 语法概览
类别 | 关键字
--------|--------
程序申明 | import和packege
程序实体声明和定义 | chan/const/func/interface/map/struct/type/var
程序流程控制 | go/select/break/case/continue/default/defer/else/fallthrough/for/goto/if/range/return/switch
- 字面量
1. 用于表示基础数据类型值的各种字面量
2. 用于构造各种自定义的符合数据类型的类型的类型字面量
3. 用于表示复合数据类型的值的复合字面量
- 操作符
~~重点:操作符优先级~~
- 表达式
示例:
```
var i1 I1
var ok bool
i1,ok = interface{}(v1)(I1)
简写:i1,ok := interface{}(v1)(I1)
```
基本类型
```
const DEFAULT_IP_string = "192.168.0.1"
const DEFAULT_PORT int = 9001
简写:
const(
DEFAULT_IP_string = "192.168.0.1"
DEFAULT_PORT int = 9001
)
```
-
高级类型
-接口
-
流程控制
1. 没有do 和 while循环,只有一个更广义的for语句
2. switch语句灵活多变,还可以用于类型判断
3. if语句和switch语句都可以包含一条初始化子语句
4. break语句和continue语句可以后跟一条标签(label)语句,以标识需要终止或继续的代码块
5. defer语句可以使我们更加方便的执行异常捕获和资源回收人物
6. select语句也用于多分之选择,但只与通道配合使用
7. go语句用于异步启用goroutine并执行指定函数
- 代码块和作用域
package main
import(
"fmt"
)
var v = "1,2,3"
func main(){
v := []int{1,2,3}
if v != 123
fmt.Printf("%v\n",v)
}
}
- if语句/switch语句/for语句/range子句/defer语句/panic和recover
第三章 并发编程综述
并发编程基础
多进程编程
多线程编程
多线程与多进程
多核时代的并发编程
第四章 go的并发机制
原理探究
goroutine
channel
实战演练:载荷发生器
第五章 同步
锁的作用
条件变量
原子操作
只会执行一次
WaitGroup
临时对象池
实战-ConcurrentMap
第六章 网络爬虫框架设计和实现
网络爬虫与框架
功能需求与分析
总体设计
详细设计
工具的实现
组件的实现
调度器的实现
简单图片爬虫
扩展与思路
网友评论