Go 语言之旅
关于此项目
简体中文
语言版本
Brazilian Portuguese — Português (Brasil)
Dutch — Nederlands
English
French — Français
German — Deutsch
Italian — Italiano
Japanese — 日本語
Korean — 한국어
Polish — Polski
Simplified Chinese — 简体中文
Spanish — Español
Swedish — Svenska
Turkish — Türkçe
使用本教程
欢迎!
你好,世界
Go 本地化
Go 离线版(可选)
Go 语言演练场
恭喜
基础
包、变量和函数
包
导入
导出名
函数
函数(续)
多个返回值
命名返回值
变量
带初始值的变量
短变量声明
基本类型
零值
类型转换
类型推断
常量
数值常量
恭喜!
流程控制语句:for、if、else、switch 和 defer
For
For(续)
For 是 Go 中的“while”
无限循环
If
带简短语句的 If
if 和 else
练习:循环与函数
Switch
Switch 的求值顺序
没有条件的 Switch
Defer
堆叠 defer
恭喜!
更多类型:结构体、切片和映射
指针
结构体
结构体字段
指向结构体的指针
结构体字面量
数组
切片
切片类似于数组的引用
切片字面量
切片的默认边界
切片的长度与容量
Nil 切片
使用 make 创建切片
切片的切片
向切片追加元素
Range
Range(续)
练习:切片
映射
映射字面量
映射字面量(续)
修改映射
练习:映射
函数值
函数闭包
练习:斐波那契闭包
恭喜!
方法和接口
方法和接口
方法
方法就是函数
方法(续)
指针接收者
指针与函数
方法与指针间接引用
方法与指针间接引用(2)
选择值接收者还是指针接收者
接口
接口是隐式实现的
接口值
底层值为 nil 的接口值
nil 接口值
空接口
类型断言
类型选择
Stringer
练习:Stringer
错误
练习:错误
Reader
练习:Reader
练习:rot13Reader
图像
练习:图像
恭喜!
泛型
泛型
类型参数
泛型类型
恭喜!
并发
并发
Goroutines
通道
缓冲通道
range 和 close
select
默认选择
练习:等价二叉树
练习:等价二叉树
sync.Mutex
练习:Web 爬虫
接下来……
接口值
在内部,接口值可以看作由一个值和一个 具体类型组成的元组:
(value, type)
接口值保存了一个具有特定底层具体类型的值。
在接口值上调用方法时,会执行其底层类型上 同名的方法。
<
11/26
>
interface-values.go
语法高亮
开启
关闭
导入
开启
关闭
package main import ( "fmt" "math" ) type I interface { M() } type T struct { S string } func (t *T) M() { fmt.Println(t.S) } type F float64 func (f F) M() { fmt.Println(f) } func main() { var i I i = &T{"Hello"} describe(i) i.M() i = F(math.Pi) describe(i) i.M() } func describe(i I) { fmt.Printf("(%v, %T)\n", i, i) }
运行
终止
格式化
重置