package main
import (
"fmt"
"time"
)
func routine() {
for i := 0; i < 10; i++ {
fmt.Printf("function routine is run %d\n", i)
time.Sleep(time.Second)
}
}
func main() {
/*
使用协程与主线程交替打印文字
*/
go routine()
for i := 0; i < 10; i++ {
fmt.Printf("function main is run %d\n", i)
time.Sleep(time.Second)
}
}
s// channel的遍历
var interChan chan int
interChan = make(chan int, 10)
for a := 0; a < 10; a++ {
interChan <- a
}
len := len(interChan)
for a := 0; a < len; a++ {
fmt.Println( <- interChan)
}
//for-range 进行遍历
for a := 0; a < 9; a++ {
interChan <- a
}
// 注意在遍历之前的关闭是不可少的
close(interChan)
for v := range interChan {
println(v)
}
6.select相对于管道的使用
package main
import "fmt"
func main() {
var channel01 chan int
var channel02 chan int
channel01 = make(chan int, 20)
channel02 = make(chan int, 20)
for a := 0; a < 20; a++ {
channel01 <- a
}
for b := 10; b < 30; b++ {
channel02 <- b
}
// 进行读取操作
ForBlock:
for {
select {
case v := <- channel01:{
fmt.Println(v)
}
case v := <- channel02:{
fmt.Println(v)
}
default:{
fmt.Println("结束")
break ForBlock
}
}
}
}
package main
import (
"fmt"
"sync"
"time"
)
/*
求阶乘引出go语言中的锁相关的问题
*/
var (
maps = make(map[int]int, 10)
lock sync.Mutex
)
func Factorial(input int){
result := 1
for a := 1; a <= input; a++ {
result *= a
}
lock.Lock()
maps[input] = result
lock.Unlock()
}
func main() {
time.Sleep(time.Second * 5)
for a := 1; a <= 100; a++ {
go Factorial(a)
}
for k, v := range maps {
fmt.Printf("key is %d, value is %d\n", k, v)
}
}