Google资深工程师深度讲解Go语言(读书笔记)

  03 May 2020


###第一章 课程介绍 1-1

之前看了无闻的go语言教程,主意是侧重于讲语法,很多地方不是特别清楚。后来准备找到了这个资源——7天用Go从零实现Web框架Gee教程,准备实践一下,但是写到第三天的时候,发现有很多知识需要补充。于是又找到目前这个课程。

视频发布的作者是google的工程师,讲解的非常到位。第一章主要介绍了课程大纲:

  1. 基本语法:变量,选择,循环,指针,数组,容器。
  2. 面向接口:结构体,duck typing的概念,组合的思想。
  3. 函数式编程:闭包的概念,多样的例题。
  4. 工程化:资源管理,错误处理,测试和文档,性能调优
  5. 并发编程:goroutine和channel,理解调度器,多样的例题
  6. 实战项目:从0开始,自主搭建分布式爬虫。

###第二章

2-1 go语言的变量名,名称写在前面,类型写在后面。why?先想到名字,后想到类型,同时对与混合类型有帮助。 函数外面声明变量必须用var关键字,变量只有包内的变量。可以用这种格式声明

var (
    aa = true
    bb = "kkkkk"
)

2-2 内建变量类型

  1. bool string
  2. (u)int (u)int8 (u)int16 (u)int32 (u)int64 (u)intptr
  3. byte rune
  4. float32, float64, complex32, complex64

2-3 枚举类型

​ go 没有枚举的关键字,一般都是用 const来定义

const (
	cpp
	java
	python
	javascript
)

iota的用法,从0开始递增,可以使用公式。比如说

const(
		B =  1 << (10 * iota)
		KB
		MB
		GB
		TB
	)
	fmt.Println(B, KB, MB, GB, TB)

2-4 条件语句

if判断,支持条件内判断。注意变量的生效区间。

const filename = "abc.txt"
	if content, err := ioutil.ReadFile(filename); err != nil{
		fmt.Println(err)
	}else{
		fmt.Printf("%s", content)
	}

switch 语句,case下默认是有break的,除非使用fallthrough。

func eval(a, b int, op string) int{ var result int switch op{ case "+": result = a+b case "-": result = a-b case "*": result = a*b case "/": result = a/b default: panic("unsuport operator:" + op) } return result }

panic中断执行

2-5循环

comments powered by Disqus