去之函数操作

函数函数

——去函数不支持嵌套,重载,和默认参数

——支持以下特性:

——无需声明原型,不定长度变参,多返回值,命名返回值参数,匿名函数,闭包

——定义函数使用关键字函数,且最左括号不能另起一行

——函数也可以作为一种类型使用

# func函数名(参数列表,可为空)(设置可返回值类型,作为可选部分){}

func A1 (int, b字符串)(int,字符串){}//定义返回的类型

func A2 (a, b, c int) (int,字符串){},,//定义函数值都为int类型

func A3 (int, b字符串)(int,字符串){}

# #有命名返回值和不命名返回值区别:

定义多个参数:可用不定常变参

函数主要(){

(1、2、3、4、5、6)

}

func (int) {

fmt.Println (a)

}

值类型传递和片传递区别:

# #函数调用:

 package 主要
 import “fmt”
<>之前func 马克斯(num1 , int, num2  int), int  { <>之前,,,,var  result  int <>之前,,,,if  num1 祝辞,num2  { <>之前,,,,,,,,result =, num1 <>之前,,,,},else  { <>之前,,,,,,,,result =, num2 <>之前,,,,} <>之前,,,,return 结果
} 
 func 主要(),{
<>之前,,,,var  a  int =, 100 <>之前,,,,var  b  int =, 200 <>之前,,,,var  ret  int <>之前,,,,ret =,马克斯(a, b) <>之前,,,,fmt.Printf(“最大值是:% d \ n”,,随著
} 


<李>

值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。


 package 主要
 import “fmt”
<>之前func 主要(),{ <>之前,,,,//var  a  int =, 100 <>之前,,,,//var  b  int =, 200 <>之前,,,,myfunc (100,, 200,, 300,, 400,, 500)
} 
 func  myfunc (args …int), {
<>之前,,,,fmt.Println (args) <>之前,,,,for  _,, arg :=, range  args  { <>之前,,,,,,,,fmt.Println (arg) <>之前,,,,}
} 


匿名函数:

里在去面,函数可以像普通变量一样被传递或使用,去语言支持随时在代码里定义匿名函数,匿名函数由一个不带函数名的函数声明和函数体组成。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。

函数主要(){

:=func(){//函数里没有名字

fmt。Println(“函数”)

}

()

}

FUNC () {

fmt。Println(“函数”)

}

闭包:闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)

函数主要(){

:=clousre (10) {,

fmt.Println (FUNC (1)

fmt.Println (FUNC (2)


}

}

FUNC clousre (int x) FUNC (int) int {

返回FUNC (int y) int {

返回x + y

}

fmt。Println(“函数”)

}

推迟:(调用:先进后出,后进先出原则)

——执行方式类似其他语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行

——即使函数发生严重错误也会执行

——支持匿名函数的调用

——常用于资源清理,文件关闭,锁解以及记录时间等操作

——通过与匿名函数配合可在返回之后修改函数计算结果

——如果函数体内某个变量作为延迟时匿名函数的参数,则在定义推迟时即以获得了拷贝,否则则是引用某个变量的地址

-没我有异常机制,但有恐慌/恢复模式来处理错误

恐慌可以在任何地方引发,但恢复只有在推迟调用的函数中有效

函数主要(){

我:=0;i<3;我+ + {

推迟fmt.Println (i)

}


}


函数主要(){

我:=0;i<3;我+ + {

推迟FUNC () {

fmt.Println (i)} ()

}


}


# #恢复案例

包主要

进口“fmt”

函数主要(){

()

B ()

C ()

}

FUNC () {

fmt。Println(“函数”)

}

func B () {

推迟func () {

如果犯错:=()恢复;犯错!=nil {

fmt。Println (B“恢复”)

}

} ()

恐慌(“B函数”)//如果只有这条,执行到这就停止了

}

函数C () {

fmt。Println (“func C”)

去之函数操作