golang 并发执行函数func类型slice

golang的slice支持func。使用func slice要注意func要完整描述入参出参。

如果需要执行一系列类型相同(入参出参格式相同)的函数,可以动态添加到一个slice里面。range slice顺序执行,也可并发执行,构造匿名goroutine,代码如下。

package main

import (
	"fmt"
	"time"
)

func f1(Str string) bool {
	if len(Str) == 0 {
		return false
	}
	fmt.Println("f1 Str =", Str)
	return true
}
func f2(Str string) bool {
	if len(Str) == 0 {
		return false
	}
	fmt.Println("f2 Str =", Str)
	return true
}
func f3(Str string) bool {
	if len(Str) == 0 {
		return false
	}
	fmt.Println("f3 Str =", Str)
	return true
}
func main() {
	//函数的入参出餐类型个数,都需要明确:func(string) bool
	var FuncSlice []func(string) bool = []func(string) bool{f1, f2, f3}
	for _, v := range FuncSlice {
		go func(v func(string) bool) {
			if TempFlag := v("aaa"); TempFlag == true {
			}
		}(v)
	}
	time.Sleep(time.Second * 1)
}

  执行结果截图:

  如果想对入参string也做一个切片,并发处理切片里的每个string类型对象,并且每个对象并发执行那些系列函数。代码如下:

func main() {
	//string类型切片,并发处理每个对象
	var Strings []string = []string{"test1", "test2", "test3", "test4", "test5"}

	//函数的入参出餐类型个数,都需要明确:func(string) bool,并发执行每个函数
	var FuncSlice []func(string) bool = []func(string) bool{f1, f2, f3}

	for _, String := range Strings {
		go func(String string) {
			for _, v := range FuncSlice {
				go func(v func(string) bool) {
					if TempFlag := v(String); TempFlag == true {
					}
				}(v)
			}
		}(String)
	}

	time.Sleep(time.Second * 1)
}

  执行结果:

 

猜你喜欢

转载自www.cnblogs.com/brave-xin/p/9334405.html
今日推荐