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 ...
随机推荐
- windows10下运行XX-net
现在墙高了,原来配置的ip4没法用了,所以重新配置一下XX-NET,这篇博客的内容参考了末尾的网站,如果我的办法行不通可以去这个网站查看其他方法 下载XX-NET 打开https://github.c ...
- mysql 修改已存在的表增加ID属性为auto_increment自动增长
今天有需要将已经存在表设置自动增长属性 具体如下 alter table customers change id id int not null auto_increment primary key; ...
- .net打印
<input type="button" onclick="javascript:printit()"></input>//打印整个ht ...
- .net控件
Asp.net 自带的Ajax Extensions中得ScriptManage和 UpdatePanel可以一起实现局部刷新,提高速度和节省网络流量 前台代码: <!DOCTYPE html ...
- linux如何安装IntelliJ IDEA
http://www.linuxidc.com/Linux/2016-12/137946.htm 创建的那个启动器脚本,只要这样输入就可以直接启动idea了
- HDU 2030 汉字统计(汉字Asics码为负,占两个char)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2030 汉字统计 Time Limit: 2000/1000 MS (Java/Others) M ...
- Many-to-many relationships in EF Core 2.0 – Part 2: Hiding as IEnumerable
In the previous post we looked at how many-to-many relationships can be mapped using a join entity. ...
- AtomicReference 原子引用
AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,底层采用的是compareAndSwapInt实现CAS,比较的是数值是否相 ...
- MySql is marked as crashed and should be repaired问题
在一次电脑不知道为什么重启之后数据库某表出现了 is marked as crashed and should be repaired这个错误,百度了一下,很多都是去找什么工具然后输入命令之类的,因为 ...
- UDP实现网络通信程序
VC6.0创建基于UDP协议的网络聊天程序 只有一个工程UDP,服务器和客户端都是这个工程,因为UDP中C/S区分不强化 只讲关键部分,避免累赘 1.为对话框添加控件 2.为控件绑定变量和消息函数 启 ...