非零基础自学Golang

第7章 函数

在编程中经常会调用相同或者类似的操作,这些相同或者类似的操作由同一段代码完成,函数的出现,可以避免重复编写这些代码。

函数的作用就是把相对独立的某个功能抽象出来,使之成为一个独立的实体。【复用代码】

例如,开发一个支持人与人之间进行对话的社交网站,对话这个功能比较复杂,可以将它封装为一个函数,每次调用该函数就可以发起对话;大型网站都有日志功能,对所有重要操作都会记录日志,而日志处理需要由多行Go文件操作相关代码组成,将这些代码组装为函数,则每次写日志时调用此函数即可。

Go语言函数支持的特性包括:

  • 参数数量不固定(可变参数)。
  • 匿名函数及其闭包。
  • 函数本身作为值传递。
  • 函数的延迟执行。
  • 把函数作为接口调用。

其中,最后一个特性由于涉及接口相关的概念,后面再会细说

7.1 声明函数

Go语言中,函数的声明以关键字func为标识,具体格式如下:

func 函数名(参数列表) (返回参数列表) {
    函数体
}
  • 函数名:函数名由字母、数字和下划线构成,但是函数名不能以数字开头;在同一个包内,函数名不可重复。

    注意:可简单地将一个包理解为一个文件夹,在后面中将会详细讲解Go语言包相关的概念。

  • 参数列表:参数列表中的每个参数都由参数名称和参数类型两部分组成,参数变量为函数的局部变量。如果函数的参数数量不固定,Go语言函数还支持可变参数。

  • 返回参数列表:返回参数列表中的每个参数由返回的参数名称和参数类型组成,也可简写为返回值类型列表。

  • 函数体:函数体指函数的主体代码逻辑,若函数有返回参数列表,则函数体中必须有return语句返回值列表。

我们使用标准格式定义一个名为add的函数,其功能是进行两个整型数字的加法,并返回结果。

[ 动手写 7.1.1]

package main

func add(x int, y int) (sum int) {

   sum = x + y
   return sum
}

在这里插入图片描述

7.1.1 函数参数的简写

在参数列表中,如果相邻的变量为同类型,则不必重复写出类型。

对于动手写7.1.1,可将第一个参数x的类型省略:

func add(x , y int) (sum int) {

   sum = x + y
   return sum
}
7.1.2 函数返回值的简写

如果函数的返回值都是同一类型,在返回值列表中可将返回参数省略。

func returnValue() (int , int) {
    return 0 , 1
}

一般情况下不推荐这种写法,因为会降低代码的可读性,无法区分每个返回值的实际意义。【确实】

7.1.3 带有变量名的返回值

使用带有变量名的返回值时,返回默认值为类型的默认值,函数结束处直接调用return即可。

func defaultValue() (a int , b string, c bool){
    return
}

以上函数在调用后会返回:0、空字符串和false。

当然,如果return后跟返回值列表也是允许的:

func defaultValue() (a int , b string, c bool){
    return 1 , "", false
}