golang 函数作为类型

golang 函数作为类型

package main

import "fmt"

type A func(int, int)

func (f A)Serve() {
    fmt.Println("serve2")
}

func serve(int,int) {
    fmt.Println("serve1")
}

func main() {
    a := A(serve)
    a(1,2)
    a.Serve()
}
type functinTyoe 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 functinTyoe) []int {
    var result []int
    for _, value := range slice {
        if f(value) {
            result = append(result, value)
        }
    }
    return result
}
func test(){
    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)
}
 
时间: 2024-10-28 22:11:24

golang 函数作为类型的相关文章

学习Golang语言(6):类型--切片

学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Golang语言(5):类型--数组 学习Golang语言(6):类型--切片 在很多应用场景中,数组不能够满足我们的需求.在初始定义数组时,我们并不知道数组所需的长度.因此,我们需要一个大小可以动态变化的数组(动态数组) 在Go语言中,这种"动态数组"成为slice(切片). 但是实际上slic

GO开发[四]:golang函数

函数 1.声明语法:func 函数名 (参数列表) [(返回值列表)] {} 2.golang函数特点: a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个函数可以赋值给变量 c. 匿名函数 d. 多返回值 定义函数类型type: package main import "fmt" type add_func func(int, int) int func add(a, b int) int { return a + b } func sub

24.函数的类型

函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函数的基本类型是: Aggregate 函数 Scalar 函数 合计函数(Aggregate functions) Aggregate 函数的操作面向一系列的值,并返回一个单一的值. 注释:如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句! Scalar 函数 Scalar 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值.

VBA自定义函数参数类型不符的错误

作者:iamlaosong 1.问题提出 编程中发现一个问题,系统总是提示编译错误,ByRef 参数类型不符, 可实际上参数定义没问题,原因在哪儿呢? 2.问题环境 假定函数定义如下: Function get_kind(addr As String) As Integer ...... End Function 调用过程: Sub check_address() Dim addr, new_addr(10000) As String ...... addr = new_addr(i) ....

用typedef定义函数指针类型(转)

typedef可以用于定义函数指针类型: [语法]typedef <返回类型> (*<函数类型名>)(参数表)typedef <返回类型> (<类名>::*<函数类型名>)(参数表) [用途]1.可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了:2.有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用. [示例] 例1:typedef void (*PF)(int x);

golang 函数-defer-recover-panic

函数 1.函数的定义 package main import "fmt" func add(a int, b int) int {  // 当函数参数类型相同时,除最后一个外其他类型可省略.                             // add(a int,b int) == add(a,b int) return a+b } func main(){ fmt.Println(add(1,2)) } //执行结果: # go run func.go 3 2.函数的多返回

c++标准14取消decltype推算函数返回类型

Table of Contents 1. c++11之前不支持auto关键字 2. c++11支持auto关键字 2.1. 但是不能自动推断函数返回类型 2.2. 使用-> decltype来声明返回类型 3. c++14让事情又回到简单 4. 我们该使用哪个c++版本 1 c++11之前不支持auto关键字 下面的代码在c++11中是不支持的 auto add(int a, int b) { int i = a + b; return i; } int main(int argc,char *

13.函数的类型和基本使用

第一:函数类型: /* 函数类型: 类似于C语言的指向函数的指针 类似于OC语言的block 函数类型是由函数的参数类型和返回值类型组成的 */ // 这两个函数的类型是 (Int, Int) -> Int func sum(a: Int, b: Int) ->Int { return a + b; } func sub(a: Int, b: Int) ->Int { return a - b; } // 可以利用函数类型定义函数变量和常量 var funcP:(Int, Int) -&

c/c++: c++函数返回类型什么情况带const

c++ 函数的返回类型,包括const 什么时候起作用呢? 函数返回值不想其立即修改的. 例子如下,这是一个简单的避免产生隐形返回变量的方法,abc 的函数返回是引用,main函数中第10行,++ 操作是基于 const int & 类型,所以会出错,但以后对改引用的操作不会受到const 约束. 这样的好处是避免了函数返回值与操作符的逻辑错误结合,例如下面的例子中函数返回的++,对于main 函数是不直观的,进一步的应用是在操作符重载方面,见下一情况说明. 1 const int & a