2022-5-27 实习Day46
1、汇出汇款选择直接解付查看账务可显示,待解付不显示账务资金流向,再点击解付依旧不显示问题前端代码修改。 –3小时 100%
2、代理行转汇退汇中退汇行swiftcode点击放大镜自动搜索前台代码问题排查 –2小时 70%
3、协助同事调试发报后端代码测试 –100%
Golang编程学习(part 41)
1、读写channel案例演示
【1】创建一个intChan,最多可以存放3个int,演示存放3个数据到intChan,然后再取出这三个int
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import "fmt"
func main() { intChan := make(chan int, 3)
intChan <- 10 intChan <- 20 intChan <- 30
num1 := <-intChan num2 := <-intChan num3 := <-intChan
fmt.Printf("num1=%v num2=%v num3=%v", num1, num2, num3) }
|
【2】创建一个mapChan,最多可以存放10个map[string]string的key-val,演示写入和读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package main
import "fmt"
func main() { mapChan := make(chan map[string]string, 2)
mapChan <- map[string]string{"city1": "北京", "city2": "天津"} mapChan <- map[string]string{"hero1": "绿巨人", "hero2": "美国队长"}
m1 := <-mapChan m2 := <-mapChan
fmt.Println(m1) fmt.Println(m2)
fmt.Printf("%T %T", m1, m2) }
|
【3】创建一个catChan,最多可以存放10个Cat结构体变量,演示写入和读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package main
import "fmt"
type Cat struct { Name string Age string }
func main() { catChan := make(chan Cat, 10) catChan <- Cat{Name: "小花", Age: "3"} catChan <- Cat{Name: "小黑", Age: "2"}
cat1 := <-catChan cat2 := <-catChan fmt.Println(cat1, cat2) fmt.Printf("%T %T", cat1, cat2) }
|
【4】创建一个catChan1,最多可以存放10个 *Cat 变量,演示写入和读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package main
import "fmt"
type Cat struct { Name string Age string }
func main() { catChan := make(chan *Cat, 10) catChan <- &Cat{Name: "小花", Age: "3"} catChan <- &Cat{Name: "小黑", Age: "2"}
cat1 := <-catChan cat2 := <-catChan fmt.Println(cat1, cat2) fmt.Printf("%T %T", cat1, cat2) }
|
【5】创建一个allChan,最多可以存放10个任意数据类型变量,演示写入和读取的用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| package main
import "fmt"
func main() { allChan := make(chan interface{}, 10)
cat1 := struct { Name string Age string }{Name: "tom", Age: "2"}
cat2 := struct { Name string Age string }{Name: "kitty", Age: "2"}
allChan <- cat1 allChan <- cat2 allChan <- 10 allChan <- "jack"
catI := <-allChan catII := <-allChan v1 := <-allChan v2 := <-allChan
fmt.Printf("%T %v\n%T %v\n%T %v\n%T %v\n ", catI, catI, catII, catII, v1, v1, v2, v2) }
|
【6】看下面代码会输出什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import "fmt"
type Cat struct { Name string Age string }
func main() { var allChan = make(chan interface{}, 10) cat1 := Cat{Name: "tom", Age: "3"} cat2 := Cat{Name: "kitty", Age: "2"} allChan <- cat1 allChan <- cat2 allChan <- 10 allChan <- "jack"
catI := <-allChan fmt.Println(catI.Name) }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| var allChan = make(chan interface{}, 10) cat1 := Cat{Name: "tom", Age: "3"} cat2 := Cat{Name: "kitty", Age: "2"} allChan <- cat1 allChan <- cat2 allChan <- 10 allChan <- "jack"
catI := <-allChan
fmt.Printf("%v", catI.(Cat).Name)
|
2、channel的遍历和关闭
【1】channel的关闭
使用内置函数close可以关闭channel,当关闭channel后,就不能再向channel写数据了,但是仍然可以从该channel读取数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package main
import "fmt"
func main() { intChan := make(chan int, 10) intChan <- 100 intChan <- 200
close(intChan)
n1 := <-intChan fmt.Println("n1=", n1) }
|
【2】channel的遍历
channel支持for-range的方式进行遍历,请注意两个细节
- 在遍历时,如果channel没有关闭,则会出现deadlock的错误
- 在遍历时,如果channel已经关闭,则会正常遍历数据,数据遍历完后就会退出遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package main
import ( "fmt" "math/rand" "time" )
func main() { intchan := make(chan int, 100) rand.Seed(time.Now().UnixNano()) for i := 0; i < 100; i++ { intchan <- rand.Intn(1000) }
close(intchan) for v := range intchan { fmt.Println("v= ", v) } }
|