func CopyFile (dst, src string) (w int64, err error) {
srcFile, err := os.Open (src)
defer srcFile.Close ()
if err != nil {
return
}
//using srcFile to do sth
return
}
values := []string{"a", "b", "c"}
for _, v := range values {
go func() {
fmt.Println(v)
}()
}
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
ch := make(chan int,1024)
go func(ch chan int) {
for{
val := <-ch
fmt.Println("val:",val)
}
}(ch)
tick :=time.NewTicker(1 * time.Second)
for i := 0;i <30;i++{
select {
case ch <-i:
case <-tick.C:
fmt.Println("1 Second")
}
time.Sleep(200 * time.Millisecond)
}
close(ch)
tick.Stop()
}
//val: 0
//val: 1
//val: 2
//val: 3
//val: 4
//val: 5
//val: 6
//1 Second
//val: 8
//val: 9
//1 Second
//val: 11
//val: 12
//val: 13
//val: 14
//1 Second
//val: 16
//val: 17
//val: 18
//val: 19
//val: 20
//val: 21
//val: 22
//val: 23
//val: 24
//1 Second
//val: 26
//val: 27
//val: 28
//val: 29
往 chan 中放数据时,如果缓冲区已经满那么将 block 以下方方式可以试探往 chan 放数据
func putSignal(ch chan struct{}, sign struct{}) (ok bool) {
select {
case ch <- sign:
ok = true
default:// 省略了会 block
}
}
return
cpu 消耗问题 select 滥用用引发