-
Notifications
You must be signed in to change notification settings - Fork 0
Go指南教程
共分为三个模块讲解
学习 Go 程序的基本组件
学习如何用条件、循环和开关语句控制代码的流程
学习如何基于已有类型定义新的类型
需要注意的是,在使用map
时一定要先make
申请内存空间后才能对其进行操作。
用它们来定义对象和其行为
方法接收者出现在 func
关键字和方法名之间的参数中。
注意首字母大写为公有方法,小写为私有方法
指针调用,方法接收者使用指针调用可以修改结构体的值,否则只是值拷贝,不影响原指向的值。方法的接收者是什么类型,调用方法或接口时的变量就应该是对应的类型,不可以混用。
不能对来自其他包的类型或基础类型定义方法。
在接口中只是对方法进行声明,格式为:函数名(参数列表) (返回值列表)
不需要添加func
关键字
概览goroutine
和channel
,以及如何使用它们来实现不同的并发模式
channel
是有类型的管道,使用前必须创建,可以用 channel 操作符 <-
对其发送或者接收值(箭头”就是数据流的方向。)
默认情况下,在另一端准备好之前,发送和接收都会阻塞。这使得 goroutine 可以在没有明确的锁或竞态变量的情况下进行同步。
为 make
提供第二个参数作为缓冲长度来初始化一个缓冲 channel
// 放入超过缓冲区长度的数据
c := make(chan int, 1)
c <- 1
c <- 2
fmt.Println(<-c)
// fatal error: all goroutines are asleep - deadlock!
只有发送者才可以关闭一个管道;可以利用range
获得管道中的每一个元素,直到它被关闭。向一个已经关闭的 channel 发送数据会引起 panic;也可以利用v, ok := <-ch
判断管道中是否还有元素。
select 语句使得一个 goroutine 在多个通讯操作上等待。
select 会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个条件分支。当多个都准备好的时候,会随机选择一个。
当 select 中的其他条件分支都没有准备好的时候,default
分支会被执行。
go中不支持函数重载,一个文件中不允许存在同名函数,否则报错redeclared in this block
go中定义的匿名函数,同时执行调用,要在{}
跟上()
进行调用,否则函数只是被定义了并未执行