Go 语言函数式编程系列教程(十八) —— 函数篇:函数的基本定义和调用

栏目: Go · 发布时间: 4年前

内容简介:几乎所有编程语言都支持函数,编写函数的目的在于将复杂的问题分解为一系列简单的任务来处理,此外同一个函数还可以被多次复用,这一结构在面向过程的函数式编程中至关重要。同为类 C 语言,Go 语言的函数和 PHP 函数的基本结构差不多,只是具体细节有所差异,在 Go 语言中,函数的基本组成为:关键字在 Go 语言中,函数主要有三种类型:我们将从普通函数的基本定义和调用开始,揭开 Go 函数的面纱。

几乎所有编程语言都支持函数,编写函数的目的在于将复杂的问题分解为一系列简单的任务来处理,此外同一个函数还可以被多次复用,这一结构在面向过程的函数式编程中至关重要。同为类 C 语言,Go 语言的函数和 PHP 函数的基本结构差不多,只是具体细节有所差异,在 Go 语言中,函数的基本组成为:关键字 func 、函数名、参数列表、返回值、函数体和返回语句,作为强类型语言,无论是参数还是返回值,在定义函数时,都要声明其类型。

在 Go 语言中,函数主要有三种类型:

  • 普通函数
  • 匿名函数(闭包)
  • 类方法

我们将从普通函数的基本定义和调用开始,揭开 Go 函数的面纱。

函数定义

在前面的第一个 Go 程序教程中,我们已经给大家演示过函数的基本定义和调用示例,这里我们用一个最简单的加法函数来进行详细说明:

func add(a, b int) int  {
    return a + b
}

如果我们调用 add(1, 2) ,返回结果是 3

func main()  {
    fmt.Println(add(1, 2))  // 3
}

下面我们以 add 函数为例介绍函数的定义,如果函数的参数列表中包含若干个类型相同的参数,比如上面例子中的 ab ,则可以在参数列表中省略前面变量的类型声明,只保留最后一个,如下所示:

func add(a, b int) int { 
    // ...
}

紧随参数列表之后的是该函数返回值的类型(这一点和 Go 变量一样,将类型放在最后,而与其他静态强类型语言,如 Java 、C 的函数声明方式不同):

func add(a, b int) int { 
    // ...
}

此外,Go 函数还支持多个返回值,后面我们介绍函数返回值的时候,再具体讨论。

函数调用

函数调用非常方便,如果是在同一个包中(即定义在同一个目录下的 Go 文件中),只需直接调用即可:

func main()  {
    fmt.Println(add(1, 2))  // 3
}

如果是在不同的包中,需要先导入了该函数所在的包,然后才能调用该函数,比如,我们将 add 函数放到单独的 mymath 包中(函数名首字母改为大写):

package mymath

func Add(a, b int) int  {
    return a + b
}

然后我们可以这样在 main 包中调用 Add 函数:

package main

import (
    "fmt"
    "mymath"
)

func main()  {
    fmt.Println(mymath.Add(1, 2))   // 3
}

在跨包调用时,只有首字母大写的函数才可以被调用,这个涉及到包的可见性,后面在介绍面向对象时会详细讨论这个,这里你只需要了解首字母大写的 Go 函数即相当于其它语言的 public 函数,Go 语言中没有 publicprotectedprivate 之类的关键字,它是通过首字母的大小写来区分可见性:首字母小写的函数只能在同一个包中访问,首字母大写的函数才可以在其他包中调用,Go 文件中定义的全局变量也是如此。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

技术管理之巅

技术管理之巅

黄哲铿 / 电子工业出版社 / 2015-6 / 49.00元

《技术管理之巅——如何从零打造高质效互联网技术团队?》为您解密国内顶级互联网公司技术团队管理的精髓。作者结合自己十余年在国内知名互联网公司MySteel、1号店等担任PMO总监、技术总监的丰富经验,进行归纳和总结。书中围绕着技术管理中的热点“如何搭建扁平化、去中心化的技术团队”、“大数据下的技术管理创新”、“目标管理方法OKR”、“阿米巴生产模式”、“Scrum和Kanban的实践”逐渐展开,从技......一起来看看 《技术管理之巅》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具