1.计算代码的运行时间
start := time.Now()
cost := time.Since(start)
fmt.Printf("花费的时间",cost)
2.goroutine的基础测试
func main() {
start:=time.Now().Unix()
var wg sync.WaitGroup
wg.Add(2)
go func() {
account(5,"绵羊")
wg.Done()
}()
go func() {
account(5,"山羊")
wg.Done()
}()
wg.Wait()
fmt.Println(counter)
end:=time.Now().Unix()-start
fmt.Println(end)
}
var counter int
func account(n int ,animal string){
for i:=0;i<n;i++ {
fmt.Println(i+1,animal)
counter = counter+1
}
}
3.采用了管道的goroutine
func main() {
c1:=make(chan string)
c2:=make(chan string)
go func() {
for {
c1 <- "山羊"
time.Sleep(time.Microsecond *500)
}
}()
go func() {
for {
c2 <- "绵羊"
time.Sleep(time.Microsecond *2000)
}
}()
for {
select {
case msg := <-c1:
fmt.Println(msg)
case msg:=<-c2:
fmt.Println(msg)
}
}
}
4.搜索文件中有test的文件或者文件夹
var query="test"
var matches int
func main(){
start := time.Now()
//GetFiles(".")
search("D:/")
fmt.Println(matches,"matches")
fmt.Println(time.Since(start))
}
func search(path string) {
files,err:=ioutil.ReadDir(path)
if err ==nil {
for _, f := range files {
name := f.Name()
if name ==query {
matches++
}
if f.IsDir() {
//如果是一个目录
search(path+name+"/")
}
}
}
}
//最后的我本地搜寻到的结果数据为
183 matches
33.4619965s
5.采用goroutine来编写搜索文件数量
//如果遇到fatal error: all goroutines are asleep - deadlock!的问题
//可根据实际情况将maxWorkCount改小一点
var query="test"
var matches int
var workCount =0
var maxWorkCount =8
var searchRequest=make(chan string)
var workDone = make(chan bool)
var foundMatch = make(chan bool)
func main(){
start := time.Now()
workCount=1
//GetFiles(".")
go search("D:/",true)
waitForWorkers()
fmt.Println(matches,"matches")
fmt.Println(time.Since(start))
}
func waitForWorkers() {
for {
select {
case path:= <-searchRequest:
workCount++
go search(path,true)
case <-workDone:
workCount--
if workCount == 0 {
return
}
case<-foundMatch:
matches++
}
}
}
func search(path string,master bool) {
files,err:=ioutil.ReadDir(path)
if err ==nil {
for _, f := range files {
name := f.Name()
if name ==query {
foundMatch<-true
}
if f.IsDir() {
//如果是一个目录
if workCount<maxWorkCount {
searchRequest<-path+name+"/"
}else {
search(path+name+"/",false)
}
}
}
if master{
workDone<-true
}
}
}
后序会继续添加其他工具