if语句初始化
if 初始化; 条件 {
}
1 | package main |
switch语句
Go会在case代码末尾自动退出switch
如果你希望下一个case的代码也能运行,那么可以在一个case中使用fallthrough关键字
1 | package main |
符文编码
一个符文可以描述任意一个Unicode字符,Go支持将字符串转换为rune值的切片,并将符文切片转换回字符串。要使用部分字符串,应该将它们转换为rune值的切片,而不是byte值的切片。这样,你就不会意外地抓取符文的部分字节
Go允许你对字符串使用for…range循环,它一次处理一个符文,而不是一个字节。这是一种更安全的方法,保证每次获取的都是一个完整的字符
1 | package main |
有缓冲的channel
当goroutine通过channel发送一个值时,该值被添加到缓冲区中。发送的goroutine将继续运行,而不被阻塞,直到缓冲区满。另一个goroutine从channel接收一个值时,它从缓冲区中提取最早添加的值
1 | package main |
chan<- int
是一个只能发送的通道,可以发送但是不能接收<-chan int
是一个只能接收的通道,可以接收但是不能发送
select
select
用于监听channel
有关的IO
操作
1 | select { |
select
语句 只能用于channel
信道的IO
操作,每个case
都必须是一个信道- 如果不设置
default
条件,当没有IO
操作发生时,select
语句就会一直阻塞 - 如果有一个或多个
IO
操作发生时,Go
运行时会随机选择一个case
执行,但此时将无法保证执行顺序 - 对于
case
语句,如果存在信道值为nil
的读写操作,则该分支将被忽略,可以理解为相当于从select
语句中删除了这个case
- 对于空的
select
语句,会引起死锁 - 对于在
for
中的select
语句,不能添加default
,否则会引起cpu
占用过高的问题
1 | package main |