zoukankan      html  css  js  c++  java
  • 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类型是一样的,但是我们可以实现很多种的逻辑,这样使得我们的程序变得非常的灵活。(编辑:雷林鹏 来源:网络)

  • 相关阅读:
    JS实现类似CAD的获取点
    ObjectARX填充
    backbone
    (转)Log4net使用详解
    Log4Net介绍
    (转)Log4net使用详解2
    ASP.NET:利用RegexStringValidator验证字符串格式
    ashx文件的使用
    编译执行和解释执行的区别
    利用 Application_Error 捕获所有异常 .
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9713468.html
Copyright © 2011-2022 走看看