厚土Go学习笔记 | 25. 函数值 函数是函数也是值

在go语言中,函数可以作为返回值使用,也可以作为参数使用。

比如

return math.Sqrt(x*x + y*y)
...
compute(math.Pow)

这样的用法,在map字典测试用例中已经见过了。下面再看一个相对简单的示例

package main

import (
    "fmt"
    "math"
    "reflect"
)

func compute(fn func(float64, float64) float64) float64  {
    return fn(3, 4)
}

func main() {
    hypot := func(x, y float64) float64 {
        return math.Sqrt(x*x + y*y)     //math.Sqrt作为返回值使用
    }
    fmt.Println(hypot(3, 4))
    fmt.Println(compute(hypot))
    fmt.Println(compute(math.Pow))  //math.Pow作为参数使用

    fmt.Println(reflect.TypeOf(hypot))      //打印hypot的数据类型
}

我们可以看到 hypot(3, 4)compute(hypot) 是相同的执行结果。它们执行的都是 hypot 中的运算。

hypot究竟是什么类型呢?最后一行代码可以打印出 hypot 的类型来。

我们一起看一下完整的运行结果

5
5
81
func(float64, float64) float64

第三个运行结果,是math.Pow使用了 compute 函数内提供的参数(3, 4),进而求得了 3 的 4 次方。即 3 * 3 * 3 * 3 = 81

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏积累沉淀

DOM解析

Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件 根据 DOM,XML 文档中的每个成分都是一个节点。 ...

22590
来自专栏跟着阿笨一起玩NET

VB.NET自我总结语法

12410
来自专栏一个会写诗的程序员的博客

Scala类型推导Scala类型推导

根据Picrce的说法:“类型系统是一个可以根据代码段计算出来的值对它们进行分类,然后通过语法的手段来自动检测程序错误的系统。”

17020
来自专栏Python

JavaScript基础

一 JavaScript的基础 1.1 JS的引入方式 1 直接编写 <script> alert('hello yuan') ...

27480
来自专栏问天丶天问

Velocity 基础语法

22940
来自专栏一直在跳坑然后爬坑

如何通过自定义View方式模拟SVG并实现动画

3.然后我们要进行对五角星动画的裁剪,涉及到的方法是PathMeasure的getLength和getSegment方法,getLength()不用多说,就是用...

13810
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-day10-代码题-继承&抽象类

Java基础-day10-代码题-继承&抽象类 1.门类继承题: 编写代码,实现如下功能: (1)定义一个门类, 包含3个属性:宽度width 和 高度hei...

51460
来自专栏Pythonista

Golang之反射(重点!!)

21420
来自专栏跟着阿笨一起玩NET

VB.NET语法小结

28720
来自专栏Jaycekon

Stream-快速入门Stream编程

一、什么是流 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator...

35460

扫码关注云+社区

领取腾讯云代金券