Gopher面试中的Coding

freelang ·
第一道题的打印结果不应是1A2B3C... 吗? 贴出我的代码: ``` func pNum(s string,c chan int){ for _,i:=range s{ time.Sleep(time.Second) //停一秒避免打印过快导致顺序混乱 f.Println(string(i)) //string对ASCII码进行转换 c <- 1 } } func pStr(s string,c chan int){ for n,i :=range s{ <- c f.Println(string(i)) //string对ASCII码进行转换 if n==len(s)-1 { // 当打印结束时一次性往管道push 2条数据,通知主协程结束 c <- 1 c <- 1 } } } func main (){ c := make(chan int,2) //有缓冲channel go pNum("123456",c) go pStr("abcdef",c) for { if len(c)==2 { // 主协程监控管道 c 的len,等于2时即退出 f.Println("Print is over.") return } } } ``` 打印结果:1a2b3c... Print is over. 还望指教~
#3
更多评论
haoyupei
大道至简,始终如一
告诉了解题思路和代码,很好的分析问题和解决问题的能力,点赞!
#1
@freelang 话说,你转载至少要注明出处吧? https://www.jianshu.com/p/268068e786b8
#2