• Go中函数作为值、类型传递。


    在Go中函数也是一种变量,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型

    type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])
    

    函数作为类型到底有什么好处呢?那就是可以把这个类型的函数当做值来传递,请看下面的例子

    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 elements of slice are: ", odd)
    	even := filter(slice, isEven)  // 函数当做值来传递了
    	fmt.Println("Even elements of slice are: ", even)
    }
    

    函数当做值和类型在我们写一些通用接口的时候非常有用,通过上面例子我们看到testInt这个类型是一个函数类型,然后两个filter函数的参数和返回值与testInt类型是一样的,但是我们可以实现很多种的逻辑,这样使得我们的程序变得非常的灵活。

  • 相关阅读:
    jmeterxpath的用法
    Jmeter中Websocket协议支持包的使用
    http 错误代码汇总
    Jmeter正则表达和xpath
    SSH Secure Shell Client安装和使用
    SecureCRT安装步骤
    DataRow转化成对象
    vb.net 与 c# 的switch ... case ...的一个重要区别
    DataRow 转换成Entity实例
    Sqlserver查找数据库中含有某字段的所有表
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/8727650.html
Copyright © 2020-2023  润新知