This is a creation in Article, where the information may have evolved or changed.
Package Mainimport ("FMT" "Io/ioutil" "OS") Func listdir (Path string, ch Chan int) {FMT. Println ("waiting .... Read path:" + path) files, _: = Ioutil. ReadDir (path) Fileslice: = []string{}dirslice: = []string{}for _, Fi: = Range files {if fi. Isdir () {//listdir (path + "/" + FI). Name ()) Dirslice = append (Dirslice, path+ "/" +fi. Name ())//fmt. Println ("dir:" + path + "/" + fi.) Name ())} else {fileslice = append (Fileslice, path+ "/" +fi. Name ())}}//return Slicevar Count intcount = 0//var FindFiles stringfor _, Value: = Range Fileslice {fmt. Println ("File:" + value)//findfiles + = value + ";" Count++}//find Sub Directory by Go patterndircount: = Len (dirslice) fmt. Println ("dir len:", Dircount) if Dircount > 0 {dirch: = make ([]chan int, dircount) I: = 0for _, Value: = Range Dirslice { Fmt. Println ("dir:" + value) dirch[i] = make (chan int) go Listdir (value, Dirch[i]) i++}fmt. Println ("Wait routine return") for _, CHS: = Range Dirch {returncount: = <-chsfmt. Println ("Return count=", returncount) Count + = returncount//rEturnfiles: = <-chs//if len (returnfiles) > 0 {//findfiles + = Returnfiles + ";" Fmt. Println ("list dir chan<-" + returnfiles)//}}}//return resultsfmt. Println ("count=", count) Ch <-Count//findfiles}func Main () {if Len (OS. Args) < 2 {fmt. PRINTLN ("Please input param of path.") Return}fmt. Println (OS. ARGS[1]) Path: = OS. ARGS[1]//"C:/users/administrator/desktop/publish/test"//path: = "C:/qqsave" ch: = make (chan int) go listdir (path, CH) Fmt. Println ("chan<-", <-ch)}