go语言中将函数作为变量传递
在Go中函数也是一种变量,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型,函数当做值和类型在我们写一些通用接口的时候非常有用,通过下面这个例子我们可以看到testInt类型是一个函数类型,然后两个filter函数的参数和返回值与testInt类型一样的,但是我们可以实现很多种逻辑,这样使得我们的程序可以变得非常的灵活。
package main
import (
	"fmt"
)
//声明了一个函数类型
type testInt func(int) bool
func isOdd(integer int) bool {
	if integer%2 == 0 {
		return false
	}
	return true
}
func isEven(integer int) bool {
	if integer%2 == 0 {
		return true
	}
	return false
}
//声明的函数在这个地方当做了一个参数
func filter(slice []int, f testInt) []int {
	var result []int
	for _, value := range slice {
		if f(value) {
			result = append(result, value)
		}
	}
	return result
}
func main() {
	slice := []int{1, 2, 3, 4, 5, 7}
	fmt.Println("slice = ", slice)
	//将函数当做值来传递
	odd := filter(slice, isOdd)
	fmt.Println("奇数是:", odd)
	//将函数当做值来传递
	even := filter(slice, isEven)
	fmt.Println("偶数是:", even)
}
//运行结果
$ go run test.go
slice =  [1 2 3 4 5 7]
奇数是: [1 3 5 7]
偶数是: [2 4]
go语言中将函数作为变量传递的更多相关文章
- R语言基本操作函数(1)变量的基本操作
		1.变量变换 as.array(x),as.data.frame(x),as.numeric(x),as.logical(x),as.complex(x),as.character(x) ... 
- C语言函数参数的传递详解
		一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行--唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){ int tmp; ... 
- C语言中函数和指针的參数传递
		近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个 ... 
- C语言函数指针变量和指针函数以及指针数组
		C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ... 
- C语言中函数参数传递的本质是值传递
		数组名做函数参数进行传递时,实际上是是一份该指针的拷贝. 给形参赋予其他值,并不影响实参的值. 类似于: int *p = a; //a为数组名 p = b; //b为数组名 ... 
- python中将函数赋值给变量时需要注意的一些问题
		python中将函数赋值给变量时需要注意的一些问题 变量赋值是我们在日常开发中经常会遇到的一个问题,本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题,分享出来供大家参考学习, ... 
- C语言中函数返回字符串的4中方法
		C语言中函数返回字符串的4中方法 函数的构成部分:返回类型.函数名称.参数.函数主体 参数:函数调用时传入的参数称为实参,函数定义时出现的参数为形参 形参的作用在于接收实参传入的值,形参和函数内部的其 ... 
- C语言-自定义函数
		C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ... 
- Python之函数与变量
		本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 全局变量与局部变量 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的函数有参数(输入),就会有 ... 
随机推荐
- 【BZOJ2843】极地旅行社 离线+树链剖分+树状数组
			[BZOJ2843]极地旅行社 Description 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务.当地最受欢迎的当然是帝企鹅了,这些 ... 
- 九度OJ 1173:查找 (排序、查找)
			时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5808 解决:3163 题目描述: 输入数组长度 n 输入数组 a[1...n] 输入查找个数m 输入查找数字b[1...m ... 
- 九度OJ 1032:ZOJ (基础题)
			时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4569 解决:2561 题目描述: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的 ... 
- go colly  proxy  代理ip 动态 ip
			package main import ( "fmt" "github.com/gocolly/colly" "github.com/gocolly/ ... 
- Locality-sensitive hashing  Pr[m(Si) = m(Sj )] = E[JSˆ (Si, Sj )] = JS(Si, Sj )
			A hash function that maps names to integers from 0 to 15. There is a collision between keys "Jo ... 
- GstAppSink简介
			Description Appsink is a sink plugin that supports many different methods for making the application ... 
- windows下python安装face_recognition模块
			安装face_recognition出现报错,要先安装dlib 安装dlib时报错,要先安装cmake cmake安装成功后,用pip安装dlib失败 从pypi下载dlib的wheel文件,然后用w ... 
- 现代JS中的流程控制:详解Callbacks 、Promises 、Async/Await
			JavaScript经常声称是_异步_.那是什么意思?它如何影响发展?近年来这种方法有何变化? 请思考以下代码: result1 = doSomething1(); result2 = doSomet ... 
- BZOJ 4435 [Cerc2015]Juice Junctions  分治最小割+hash
			分治最小割的题目,要求n2. 之前用的n3的方法自然不能用了. 于是用hash,设hash[i][j]表示在最小割为i的时候,j是否与S联通. 看懂这个需要理解一下最小割树的构造. 这种题建议用EK写 ... 
- CSS那个背景图片的坐标怎么设置?怎么计算的?
			background:url(images/hh.gif) no-repeat -10px 0;},作用是移动背景的位置. 背影图片的左上角相对当前元素左上角的坐标. 右为X轴正半轴, 下为Y轴正半轴 ... 
