简介

在 GO 语言中还有另外一种定义使用函数的方式,就是函数类型,所谓的函数类型就是将函数作为一种类型可以用来定义变量,这种用法类似于前面我们讲过的 int ,float64,string 等类型,这些类型都是可以用来定义变量。基本语法如下:

说明如下:type 关键字后面跟着类型的名字 (FunType),FunType 就是一个类型。那么 FunType 是一个什么类型呢?

是一个函数类型,因为 FunType 后面跟着 func (用来定义函数的),但是这里注意的是没有函数名字。那么 FunType 是怎样的一个函数类型呢?是一个需要传递两个整型参数,有一个整型返回值的函数类型。

既然函数类型类似于我们前面学习过的 int ,string 等类型,那么函数类型可以用来定义变量。

var result FuncType // 表示定义了一个变量叫 result, 该变量的 类型是 FuncType 类型,而该类型是一个函数类型。

下面我们可以使用 result 这个函数类型的变量来调用函数了。

result=Test // 将要调用的函数的名字赋值给 result 变量(也可以理解成将 result 变量指向了要调用的函数),这里要注意的是:第一:Test 后面不能加括号。第二:函数类型变量 result 要和将要调用的函数 Test 保持一致,所谓一致就是我们定义的函数类型 FuncType 的变量 result,只能调用参数是两个整型的,并且有一个返回值,而且也是整型的函数。那么 Test 函数完全满足要求。

现在已经完成了函数类型变量 result 指向了函数 Test, 那么我们可以使用函数类型的变量 result 调用函数:

result (3,6)// 完成函数的调用。

这是我们在 GO 语言中使用函数类型的方式完成函数的调用,可能有的小伙伴感觉这种方式比较麻烦,不如我们前面讲解的方式使用起来简单。那么在这里,要求大家先理解这种方式,能记住语法就可以了。关于该方式的优势,等我们讲解完面向对象编程这个知识点后,大家就有深刻的理解了。

package main

import "fmt"

func demo1(a int, b int) {

    fmt.Println(a + b)

}

//func (int,int)int函数类型

func demo2(s1 int, s2 int) {

    fmt.Println(s1 + s2)

}

//定义函数类型 为已存在的数据类型起别名

type FUNCDEMO func(int, int)

func main() {

//demo1(10, 20)

//函数的名字表示一个地址 函数在代码区的地址

    fmt.Println(demo1)

//f是func (int,int)函数类型定义的变量

//var f func(int, int)

var f FUNCDEMO

//函数类型定义的变量结束函数的地址

    f = demo1

    fmt.Println(f)

//通过f调用函数

f(10, 20)

    f = demo2

f(1, 2)

    fmt.Printf("%T", f)

}

返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...相关推荐

  1. python变量类型-【干货】Python基础语法之变量类型

    原标题:[干货]Python基础语法之变量类型 还没关注? 01 Python编码 Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错. 解决 ...

  2. python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....

    python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 函数,就是一个代码块,这个代码块是别人写好的.我们调用就可以. 函数也可以称为方法. 1.函数语法定义 ...

  3. (五)Kotlin简单易学 基础语法-初始函数(下)

    (五)Kotlin简单易学 基础语法-初始函数(下) 函数内联 ➢ lambda可以让你更灵活的编写应用,但是,灵活也要付出代价的. ➢在JVM上,你定义的lambda会以对象实例的形式存在,JVM会 ...

  4. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  5. C++基础::语法特性::函数重写(override)与协变返回类型(covariant return type)

    函数重写 在进行本文的协变返回类型(covariant return type)的讨论之前,不妨先重新温故C++关于函数重写的语法规则.协变返回类型与函数重写有着千丝万缕的联系. 首先明确函数重载(o ...

  6. python定义函数后怎么输出_python中如何定义函数返回值

    返回值简介: 简单介绍print和return的区别,print仅仅是打印在控制台,而return则是将return后面的部分作为返回值作为函数的输出,可以用变量接走,继续使用该返回值做其它事. 函数 ...

  7. C语言中,指针在一个自定义且不带返回值是如何改变外部一些变量的(指针与函数的相互作用)

    如果自定义一个函数,没有任何返回值,而形参是一个指针传入这个函数,在这个函数中,无论如何改变指针所指的方向,函数结束后对外部数据没有变化,唯独通过指针,来间接改变函数以外的变量的值(例如令*p = 一 ...

  8. (14年)2.写一个函数int func(int n)其返回值是n的逆序整数,例如n=123函数返回321.n=72839,函数返回93827

    #include <stdio.h> #include <stdlib.h> /*写一个函数int func(int n)其返回值是n的逆序整数 例如n=123.函数返回321 ...

  9. Python基础教程(二):基础语法、变量类型

    Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 在本章中我们将来学习Python的基础语法,让你快速学会Python编程. 第一个Pyth ...

最新文章

  1. EMC:欲占企业数据中心市场大半江山
  2. 那些重金投入区块链的互联网巨头,现在怎样了?|BCCon
  3. 网络营销外包浅析B站破圈运营是如何增强网络营销能力的?
  4. 如何让带有批注等修改痕迹的word文档编程“正规”文档?
  5. muse ui tabs背景颜色字体颜色
  6. C0304 备份最后一天所有修改的文件
  7. 1到n的整数中,1出现的次数
  8. 数据结构折半查找例题_查找(习题课)
  9. 清理git本地帐户信息
  10. ir2104作用,ir2104引脚功能和IR2103 请问有没有人可以通俗地讲解IR2104芯片引脚的功能?...
  11. 【荐课】10分钟速成课:经济学
  12. Myshell AI:让你轻松提高英语口语和听力的神器
  13. 21辐轮王土拨鼠4-15岁全世界十大进口儿童自行车品牌排行榜
  14. Err 1091 - Can't DROP 'car id' check that column/key exis
  15. 网页搜索指定网站内容site
  16. am335x uboot启动流程分析
  17. 米筐量化提供的数据质量怎么样?
  18. 美国标准信息交换标准码
  19. 固体潮 matlab,基于MATLAB改进设计的固体潮改正程序及其应用
  20. 长见识了: 一篇文章带你看懂 硬盘数据恢复软件的原理

热门文章

  1. 【Iphone 游戏开发】游戏引擎剖析
  2. 10种增强脑力的办法
  3. 第十四章 虚拟专网 ×××
  4. Java Scanner 类、异常处理 总结
  5. 微信公众平台JSSDK开发
  6. Django中实现MySQL主从同步实现读写分离
  7. ubuntu18.04安装python的mysqlclient==1.4.6报错ERROR Command errored out with exit status 1python setup
  8. linux内核printk调试手段,[Mini2440] 内核调试手段之 printk
  9. linux usb 触摸屏驱动,请教大家一个linux下的usb触摸屏驱动的问题
  10. asprise java_使用asprise进行图片验证码识别