本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

Golang函数详解

函数的使用

//函数的可变参数,参数数量不固定
//求n个参数的和
func sumfn(x ...int) int{
	//此时的x是一个[]int类型
	sum := 0
	for _,v := range x{
		sum +=x
	}
	return sum
}

//返回多个参数的函数
func calc(x,y int)(sum int, sub int){
	sum = x+y
	sub = x-y
	return
}
 

自定义类型

// 定义一个calc类型的函数
type calc func(int,int) int
func add(x,y int) int{
	return x+y
}
func main(){
	var c calc
	c = add
	fmt.Printf("c的类型:%T", c) // mian.calc
	fmt.Printf(c(10,5))//15
	
	f:=add
	fmt.Printf("f的类型:%T", f) // func(int,int)int
}

函数作为另外一个函数的参数

func add(x,y int) int{
	return x+y
}

func sub(x,y int) int{
	return x-y
}

//自定义函数类型
type calcType  func(int,int) int

//函数作为参数
func calc(x,y int, op calcType) int{
	return op(x,y)
}
func main(){
	//求10+5
	calc(10,5,add)
	//求10-5
	calc(10,5,sub)
}

函数作为返回值

image.png

匿名函数

import "fmt"

func main() {
	//自执行函数
	func(){
		fmt.Println("test...")
	}()
	
	//匿名函数 	
	var fn = func(x,y int) int{
		return x * y
	}
	
	// 2×3
	fn(2,3)
}

函数的闭包

  • 闭包是指有权访问另外一个函数作用域的变量的函数.
  • 创建闭包的常见方式:在一个函数内创建另外一个函数,通过另外一个函数访问外层函数的局部变量
  • 使用闭包作用域内的局部变量不会立即销毁

image.png

defer语句

  • defer语句延迟处理,并且逆序执行(最后defer的语句,最先执行)

panic/recover处理错误

  • panic 可以在任何地方引发,但是recover只有在defer调用的函数中有效

捕获异常
image.png


示例:除零异常
image.png

# golang  

评论