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)
}
执行结果:
golang 并发执行函数func类型slice的更多相关文章
- Golang通脉之函数
函数是组织好的.可重复使用的.用于执行指定任务的代码块. Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民". 函数定义 Go语言中定义函数使用func关键字 ...
- golang 函数作为类型
golang 函数作为类型 package main import "fmt" type A func(int, int) func (f A)Serve() { fmt.Prin ...
- 【GoLang】函数作为 类型 和 值
代码示例 package test import ( "fmt" "testing" ) type testInt func(int) bool func is ...
- 使用JavaScript实现量化策略并发执行——封装Go函数
在实现量化策略时,很多情况下,并发执行可以降低延时提升效率.以对冲机器人为例,需要获取两个币的深度,顺序执行的代码如下: 请求一次rest API存在延时,假设是100ms,那么两次获取深度的时间实际 ...
- 四、golang内置函数、递归、闭包、数组切片和map
一.总体内容 1.内置函数.递归函数.闭包 2.数组和切片 3.map数据结构 4.package介绍 一.内置函数 注意:值类型用new来分配内存,引用类型用make来分配内存 1.close:主要 ...
- Golang 并发简介
并发概要 随着多核CPU的普及, 为了更快的处理任务, 出现了各种并发编程的模型, 主要有以下几种: 模型名称 优点 缺点 多进程 简单, 隔离性好, 进程间几乎无影响 开销最大 多线程 目前使用最多 ...
- Golang基础之函数
golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...
- Golang面向过程编程-函数
Golang面向过程编程-函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是函数 简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的 ...
- golang并发编程goroutine+channel(一)
go语言的设计初衷除了在不影响程序性能的情况下减少复杂度,另一个目的是在当今互联网大量运算下,如何让程序的并发性能和代码可读性达到极致.go语言的并发关键词 "go" go dos ...
随机推荐
- ACM HDU-2952 Counting Sheep
Counting Sheep Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- dedecms Ajax异步获取文章列表
dedecms如何通过ajax(异步)动态获取文章列表数据. 第一步添加:服务端(PHP)代码 打开plus目录下面的list.php文件,在12行代码下面添加以下代码: if(isset($_GET ...
- request.getParameterMap和request.getParameter不一样的显示
public class KeywordUtil { /** * 只提q参数关键字 * * @param request * @return 处理后的关键字Str ...
- dynamic_cast动态转换
我们都知道dynamic_cast会在运行时进行类型检查,比较安全,static_cast静态转换,不安全 dynamic_cast转换的类型必须是个类,且这个类中必须有虚函数,为什么呢? 虚函数对于 ...
- excel 在web导入到数据库的操作方法
这个操作的大致步骤是把本地文件存入到服务器端,然后再读取服务端的文件并且使用NPOI这个第三方的插件去读取文件导入到数据库批量插入需要注意的是,前端需要使用form包裹type=file的文件标签,并 ...
- PhoneGap 的存储 API_Web Sql
一.介绍 此 API 基于 W3C WEB SQL Database Specification 和 W3C Web Storage API Specification. 有些 设备已经提供了对该规范 ...
- 如何用jstl的select标签做二级联动下拉列表框??
下拉列表框的多级联动早就会了.但是用jstl的select标签做下拉列表框的做二级联动的时候还是遇到了些问题.主要问题在用Ajax查询到的数据如何拼成下拉选项的时候.其实很简单,但我还是折腾了好久.所 ...
- js 关联着数组中追加元素
var arr_data = new Array(); for ( var i in data.data ){ arr_data.push(arr_data[i] = data.data[ i ] ) ...
- Multiply Strings 字符串相乘
http://www.cnblogs.com/TenosDoIt/p/3735309.html https://blog.csdn.net/fly_yr/article/details/4805561 ...
- mavan下scala编译中文乱码的问题.以及内存溢出问题解决
网上都没有找到我这个问题.都是自己解决的.也不知道后来者能不能遇到 关键字: java.lang.StackOverflowError scala not found scala <config ...