三个goroutine分别输出张三、李四、王五,使其按上述顺序输出5遍。#
package main
import (
"fmt"
"sync"
)
var w sync.WaitGroup
func main() {
w.Add(15)
chan1 := make(chan struct{}, 0)
chan2 := make(chan struct{}, 0)
for i := 0; i < 5; i++ {
go func() {
defer w.Done()
fmt.Println("张三")
chan1 <- struct{}{}
}()
go func() {
defer w.Done()
<- chan1
fmt.Println("李四")
chan2 <- struct{}{}
}()
go func() {
defer w.Done()
<- chan2
fmt.Println("王五")
}()
}
w.Wait()
}
编写程序输出某目录下的所有文件(包括子目录)#
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
dir := os.Args[1]
listAll(dir, 0)
}
func listAll(path string, curHier int) {
fileInfos, err := ioutil.ReadDir(path)
if err != nil {
fmt.Println(err)
return
}
for _, info := range fileInfos {
if info.IsDir(){
for tmpHier := curHier; tmpHier > 0; tmpHier-- {
fmt.Printf("|\t")
}
fmt.Println(info.Name(), "\\")
listAll(path + "/" + info.Name(), curHier + 1)
} else {
for tmpHier := curHier; tmpHier > 0; tmpHier-- {
fmt.Printf("|\t")
}
fmt.Println(info.Name())
}
}
}