http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
Golang 内建的 close 方法可以关闭 channel,如果往已经关闭的 channel 发送数据,则会报错:panic: close of closed channel.
看如下代码,在一段时间内,生产者可以不断往 channel 写入数据,消费者进行处理,一段时间后 channel 关闭了,这个时候如果还有数据往 channel 发送,程序就会报错。
package main
import (
"fmt"
"sync"
"time"
)
func main() {
jobs := make(chan int)
var wg sync.WaitGroup
go func() {
time.Sleep(time.Second * 3)
close(jobs)
}()
go func() {
for i := 0; ; i++ {
jobs <- i
fmt.Println("produce:", i)
}
}()
wg.Add(1)
go func() {
defer wg.Done()
for i := range jobs {
fmt.Println("consume:", i)
}
}()
wg.Wait()
}
for的语法结构如下:
for 变量 in 串行 do 命令区域 done
case的语法结构:
case 待测项 in 样式串1] 命令区域1 ;; 样式串2) 命令区域2 ;; 样式串3) 命令区域3 ;; *) 命令区域 ;; esac
每当按退格键(BackSpace)删除输入的字符,如果没有字符还按键,电脑就会发出嘟嘟声。。。
在Bash中,这种可以影响程序流程的式子,称为条件判断式。判断式的操作数分成“单元”及“二元”两种。如“-f 文件”可测试文件是否存在,运算符 -f 后接一个操作数“文件”,这种判断式称为“单元”;
条件测试的写法,有以下10种:
1.执行某个命令的结果
2.传回某个命令执行结果的相反值
3.使用复合命令:((算术))
4.使用Bash关键字‘[[’、‘]]’组成的式子:[[ 判断式 ]]
5.使用内置命令:test 判断式
6.使用内置命令:[ ]
7.使用 -a、-o 进行逻辑组合
8.命令1 && 命令2
9.命令1 || 命令2
10.&& 和 || 合用
在Bash Shell中,流程控制命令有2大类:“条件”、“循环”。属于“条件”的有:if、case;属于“循环”的有:for、while、until;命令 select 既属于“条件”,也属于“循环”。不管是哪一种,均需进行条件测试,再根据测试结果,决定程序流程进行的方向。
Bash的算术运算有以下几种方法:
| 序号 | 名称 | 语法 | 范例 |
|---|---|---|---|
| 1 | 算术扩展 | $((算术式)) | r=$((2+5*8)) |
| 2 | 使用外部程序 | expr 算术式 | r=`expr 4 + 5` |
| 3 | 使用 $[] | $[算术式] | r=$[4+5] |
| 4 | 使用内置命令 declare | declare -i 变量=算式式 | declare -i r=8+16 |
| 5 | 使用内置命令 let | let 算术式 | let r=8+16 |
这个关键字只能用来定义类和定义方法, 不能使用final这个关键字来定义成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数,所以不能使用final来定义成员属性。
使用final关键标记的类不能被继承;