💪 三天刷完 Go by Example(上)|Go主题月

891 阅读3分钟

引言

来源 & 简介

官方链接:gobyexample.com/

中文翻译:gobyexample-cn.github.io/

顾名思义,通过示例(examples)来介绍/学习 Go 语言(特性)

有关本系列

本系列分为上、下篇,分别对应:

  • 01~21 基础语法(without goroutines/channel)
  • 22~39 并发编程
  • 40 + 常用方法(常见的开发场景,使用的内置函数等)

Github 代码:github.com/ftopia2020/…

$ git clone git@github.com:ftopia2020/go_by_examples.git # git clone 至本地使用
➜  Go go version
go version go1.14.2 darwin/amd64 # 个人 Golang 版本

以下文章内容为本人对 Example 示例的一些常规记录:

  1. 贴图(包含示例代码及注释 + 打印运行后的截图)
  2. 会对 Examples做稍许更改 + 个人参考注释

不适合(仅个人看法):

  • 无任何编程基础的开发,直接示例学习还是需要一定编程基础的(主要是理论概念理解)
  • 不建议作为 Golang 系统学习资料,系统学习建议 Effective Go

适合以下:

人群建议
其他语言有基础,Golang 初学者建议作为系统学习的引申(譬如结合 Effective Go
Golang 初级开发每个示例运行 & 思考,先不看 output,猜测 & 对比
Golang 中、高级开发可做为查漏补缺,扫图 =》过 即可

01 Hello World

$ go run 01_hello-world.go     # go run 执行 golang 文件
$ go build 01_hello-world.go   # go build 编译 =》二进制文件

02 Values

基本数据类型:字符串、整形、浮点型、布尔值

main 函数仅可定义一个,示例仅为了运行方便 go run xxx.go

03 Variables

变量声明方式,须记住基础类型的初始值 字符串 - "" 整形/浮点 - 0 布尔 - false

派生类型初始,指针、channel、func、接口为 nil; 数组为[];字典为 map[]

04 Const

引入 “reflect” 包,打印常量类型便于理解: 数值型常量没有确定的类型,直到被给定

05 For

后续教程,学习到 range 语句,channels,以及其他数据结构时,会看到一些 for 的其它形式。

06 If/else

go 未提供三目运算符,直接用 if else 实现

07 Switch

这里的示例引入了函数(func)和 接口(interface)的概念

初学者可先学完后续的 12 Functions 以及 20 Interfaces 之后再来理解

08 Array

数组必须定长度、不支持扩容,在实际开发中,切片(slice)使用更多,看 ↓

09 Slice

👍推荐阅读由 Go 团队撰写的文章 blog.golang.org/slices-intr… ,可了解更多关于 Go 中 slice 的设计和实现细节

10 Map

11 Range

有关 Golang 字符串,需要进一步阅读 Strings, bytes, runes and characters in Go

12 Functions

13 Multiple return values

14 Variadic functions

15 Closures

「闭包」的理解和使用的场景,通过一个例子是远远不够的,建议引申阅读相关材料加深理解

通过阅读内置函数源码或者一些框架的源码,不难看到闭包的使用,其在函数式编程中很有利

下面的例子也会用到闭包,并且支持了一个很重要的特性——递归

16 Recursion

同「闭包」,递归的理解和应用其实和语言无关,而是一种必须掌握的编程思想和算法

17 Pointers

指针部分,初学者可能有点难以理解(C 语言等相关基础开发就不陌生啦~),建议自行引申阅读相关材料

18 Structs

19 Methods

Go 有面向对象编程的类型(Struct)和方法(Method)的概念,但是它没有继承

Go 语言的接口实现和其它的编程语言不一样,Go开发者的初衷就是保证它易于使用,用途更广泛

下面介绍 Go 的 Interface 接口的示例

20 Interfaces

21 Errors

Golang 对于错误处理较简单,以上示例只是一个简单的应用。

更多 Golang 错误处理的内容,请参阅 blog.golang.org/error-handl…

Next

以上示例,基本涵盖了 Golang 基础语法(除并发编程 Goroutines & Channel 相关特性以外)

之后中篇 三天刷完 Go by Example(中),将具体开始 Golang 并发编程的示例,也部分是 Golang 魅力所在~