【Go入门】第二天 函数

函数概述

Go语言的函数定义格式如下:

func 函数名(参数列表)返回值类型 {函数体}

比如:

func Test(a int, b int) int {}//定义了传入两个int参数,返回int型的test名函数

Go语言相对于C/C++语言的特点

(1)无需声明函数原形

(2)支持不定参数(后续会讲到)

(3)支持多返回值(后续会讲到)

(4)支持命名返回参数(函数返回值的一种类型)

(5)支持匿名函数和闭包(后续会讲到)

(6)函数被视为一种类型,一个实体函数可以赋值给变量

(7)不支持 嵌套包(nested)一个包里不能有两个名字一样的函数

(8)不支持 重载

(8)不支持 默认参数

不定参数列表

不定参数的类型:

Go语言支持两种不定参数类型

(1)固定类型的不定参数

语法格式:

参数名 ...类型名

比如:

func f1(args ...int)//传入int型的不定参数

(2)任意类型的不定参数

语法格式:

参数名 ...interface{}

比如:

func f1(args ...interface{})//传入任意类型的不定参数

注:interface{}为空接口类型,任意类型都实现了空接口,可以将任意类型对象赋值给空接口

不定参数使用注意事项:

(1)不定参数的位置是形参的最后一个参数。

(2) 函数调用时,定参数必须传值,不定参数根据需要可以不传值。

函数的嵌套调用

Go语言中基本函数调用方法与原理与C中基本相同,此处不再赘述。

主要区别在于不定参数函数的调用

情况1:全部参数传递

Test(args...)//本层不定参数args全部参数传递给test函数

情况2:部分参数传递

使用切片的方式

test(args[2:]...)//编号为2(包括)后面的数据全部传递

函数返回值 

Go语言支持命名返回函数和多返回值的情况,所以Go函数返回值的使用非常灵活,可按照一下方法进行归类。

1.单个返回值的情况

 (1)指定返回值类型

这种与C情况相似,将返回值类型写在参数列表括号之后。

func Test (a int) int {//Test返回值是int类型
    return a    //手动返回变量
}

(2)指定返回值变量

这是Go中函数返回值的特色格式,在参数列表之后直接定义返回值变量,返回时不需要指定目标变量。

func Test (a int b int)(sum int){
    sum=a+b   //返回值变量可以直接使用
    return    //返回时不需要指定目标变量
}

2.多个返回值的情况

多个返回值情况与上述类似,不再举例。 

(1)指定多返回值类型

(2)指定多返回值变量

函数类型

 type关键字

type用于新类型声明格式,新类型不是原类型的别名,除了拥有相同的数据存储结构外,新类型和原类型没有任何的关系,使用时除了目标类型是未命名类型,其他情况必须使用显式转换。

使用格式:

type 新类型 原类型【可以是函数类型哦】

type Funcname func(a int,b int) int//原函数是函数类型 

匿名函数与闭包 

 (1)匿名函数

概念:因为Go中有函数类型的概念,所以匿名函数对应于普通变量中的“字面量”。

匿名函数的一般形式:

func (参数列表)返回值列表{函数体}(传参列表)

可以直接赋值给自动变量,变量类型直接推导为对应的函数类型。 

(2)闭包 

闭包的概念:有权访问另一个函数作用域中的变量的函数。(在一个函数内部创建另一个函数:虽然不能在函数内部直接声明另一个函数,但是可以在一个函数中声明一个函数类型的变量) ,函数的返回值是匿名函数,匿名函数能够捕获原函数的变量,原函数称为闭包。

变量的作用域会随着闭包的使用而延长。

延迟调用defer

defer关键字: 将后面跟随的语句进行延迟处理,将会延迟到函数进行最后的return之后再执行。

注意事项:

(1)defer只能出现在函数的内部。

(2)多个defer,先被defer的语句最后被执行,最后被defer的语句最先被执行。

(3)与匿名函数配合使用时,执行时间在最后,但是传参的动作没有defer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值