您的位置:首页 > Web前端

golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名

2017-10-22 20:09 465 查看

函数是一个变量类型

package main

import("fmt"

)

func main() {
c := add
fmt.Println(c)

sum := c(10, 20)
fmt.Println(sum)
}

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


输出如下:

0x488a00
30


自定义一个type类型函数model

package main

import("fmt"

)
//定义一个type类型,func(int,int) int 构造一种方法的模型
type methodModel func(int,int) int

func add(a int ,b int) int {
return a+b
}
//接受一个类似methodModel方法的具体方法
func operator(entity methodModel,a int,b int)int{
return entity(a,b)
}

func main() {
var a int = 1
var b int = 2
c:= add
sum := operator(c,a,b)
fmt.Printf("%d\n",sum)
}


输出3

命名返回值、忽略返回值

1、值传递

2、引用传递

注意1:无论是值传递,还是引用传递,传递给函数的都是变量的副本

不过,值传递是值的拷贝。引用传递是地址的拷贝

map、slice、chan、指针、interface默认以引用的方式传递

package main

import("fmt"

)

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

func calc(a, b int) (sum int, avg int) {
sum = a + b
avg = (a +b)/2
return
}

func main() {
var a int = 1
var b int = 2

c := add(a,b)
fmt.Println(c)

sum,_ := calc(a,b)
fmt.Println(sum)

sum1,avg1 := calc(a,b)
``
mt.Println(sum1,avg1)
}


输出如下:

3
3
3 1


可变参数

package main

import("fmt"

)

func add(a int,args ... int)(result int) {
result = a
for i:=0;i<len(args);i++{
result += args[i]
}
return
}

func main() {
sum := add(1,2,3)
fmt.Print(sum)

}


输出如下:6

defer用途

当函数返回时,执行defer语句。因此,可以用来做资源清理

多个defer语句,按先进后出的方式执行

defer语句中的变量,在defer声明时就决定了

package main

import("fmt"

)

func add(a int,b int) int{
defer fmt.Println("defer method")
return a + b
}

func main() {
defer fmt.Println("defer main1")
defer fmt.Println("defer main2")
sum := add(1,2)
fmt.Print(sum,"\n")

defer fmt.Println("defer method after")

}


输出如下:

defer method
3
defer method after
defer main2
defer main1


匿名函数

package main

import("fmt"

)

//匿名函数1
var (
result = func(a int,b int) int{
return a + b
}
)

//非匿名函数
func sum1(a int,b int)int {
return a + b
}

//匿名函数2
func sum2(a int ,b int) int {
tempMethod := func(a int ,b int) int {
return a + b
}
return tempMethod(a,b)
}

func sum3(a int ,b int ) int {
resultTemp := func(a int ,b int )int {
return a + b
}(a,b)
return resultTemp
}

func main() {

sum := result(1,2)
fmt.Println(sum)

method:=sum1
fmt.Println(method(3,4))

fmt.Println(sum2(4,6))

fmt.Println(sum3(7,9))
}


输出如下:

3
7
10
16
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐