在go中,函数也可以被当成数据类型

e.g:下面有两个函数,+、-,然后定义了一个函数类型FuncType1,然后对funcType1附于不同的函数,则funcType1就可以执行相应的函数

package main

import (
"fmt"
_ "testinit"
) func main() {
a:=10
b:=10
var funcType1 FuncType1 = Add1
fmt.Println(funcType1(a,b))
funcType1 = Minus1
fmt.Println(funcType1(a,b))
} func init() {
fmt.Println("main init()")
} func Add1(a,b int) int {
return a+b
} func Minus1(a,b int) int {
return a-b
} //定义函数类型
type FuncType1 func(int,int) int

 这样就是对funcType1附了两次值,还可以进一步调整,如下

package main

import (
"fmt"
_ "testinit"
) func main() {
a:=10
b:=10
/*var funcType1 FuncType1 = Add1
fmt.Println(funcType1(a,b))
funcType1 = Minus1
fmt.Println(funcType1(a,b))*/ fmt.Println(Cal(a,b,Add1)) fmt.Println(Cal(a,b,Minus1))
} func init() {
fmt.Println("main init()")
} func Add1(a,b int) int {
return a+b
} func Minus1(a,b int) int {
return a-b
} type FuncType1 func(int,int) int

//定义函数,将函数类型当成一种函数参数
func Cal(a,b int,funcType FuncType1) (result int) {
return funcType(a,b)
}

  

定义一个新的函数,将函数类型当成一种函数参数,这样就可以不用给函数类型附值,而直接用,方便了很多,也灵活了很多

go 函数类型的更多相关文章

  1. 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

    看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...

  2. Swift - 33 - 返回函数类型和函数嵌套

    //: Playground - noun: a place where people can play import UIKit /*---------------------------返回函数类 ...

  3. Swift - 32 - 函数类型

    //: Playground - noun: a place where people can play import UIKit func add(a:Int, b:Int) -> Int { ...

  4. C语言的函数类型

    C语言的函数类型与返回值类型不一致时出现,是以函数类型为标准; 而如果在java与c#语言中上述情况是编译错误的;

  5. 智能合约语言 Solidity 教程系列3 - 函数类型

    Solidity 教程系列第三篇 - Solidity 函数类型介绍. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以 ...

  6. TypeScript 函数-函数类型

    //指定参数类型 function add(x:number,y:number){ console.log("x:"+x); // reutrn(x+y); } //指定函数类型 ...

  7. TypeScript基础类型,类实例和函数类型声明

    TypeScript(TS)是微软研发的编程语言,是JavaScript的超集,也就是在JavaScript的基础上添加了一些特性.其中之一就是类型声明. 一.基础类型 TS的基础类型有 Boolea ...

  8. typescript函数类型接口

    /* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据, ...

  9. Swift2.0语言教程之函数的返回值与函数类型

    Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...

随机推荐

  1. 安装VMware tools

    1.发现在vmware中无法复制粘贴,经查询后Centos精简版是没有VMware tools的.2.df是用来看磁盘空间使用情况的.3.rpm包的格式:name+version(主版本+此版本+修正 ...

  2. Unity Shader笔记

    shader “MyShader”{ Properties{ -CubeMap(“Cube Map” , Cube) = ""{这里可以添加图片渲染模式} } SubShader{ ...

  3. shell 启动和停止脚本

    启动脚本 start_kmeans_v3.sh #!/bin/bash #用于kmeans_data_v3_hadle启动 ps -ef | grep kmeans_data_v3_hadle.py ...

  4. Servlet第一篇(Tomcat)

    Tomcat 什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 为什么我们需要用到Tomcat 提供能够 ...

  5. UVA 679 二叉树

    题目链接:https://vjudge.net/problem/UVA-679 参考自:刘汝佳的紫书 思路: 我们发现,对于每一颗子树,假如小球是第奇数次到达这颗子树的根节点时,那么此时应该向左子树走 ...

  6. 在windows下使用jenkins部署docker容器

    在windows下使用jenkins部署docker容器最近在学习jenkins,docker部署来实现集成部署,所以想在windows下面实现测试,但是发现在windows下docker支持不是很好 ...

  7. POJ—1321(棋盘问题)

    题目链接:https://cn.vjudge.net/contest/65959#problem/A 入门dfs,给一张地图,由“#”和“.”组成,“#”处可以放棋子,且棋子不能同行同列,问放满所有“ ...

  8. swift 粒子效果

    1. override func viewDidLoad() { super.viewDidLoad() let rect = CGRect(x: 0.0, y: -70.0, width: view ...

  9. php JS 导出表格特殊处理

    但是这样导出身份证号会变为科学计数: 解决方法就是: 我们了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取 它,所以把mi ...

  10. 实现一个简易版的SpringMvc框架

    先来看我们的程序入口DispatcherServlet 主要核心处理流程如下: 1 扫描基础包下的带有controller 以及 service注解的class,并保存到list中 2 对第一步扫描到 ...