Go 函数

1. 函数定义

func 函数名(参数1, 参数2 类型, 参数3 类型) (返回值1类型, 返回值2类型){
​ return 类型1, 类型2
}

func main() {
   add(1, 2, 3.1)
}

func add(a, b int, c int) (int, error) {
   return a + b * c, nil
}
  • 返回值提前定义
func add(a, b int, c int) (sum int, err error) {
	sum = a + b + c
	err = nil
	return sum, err
}
  • 不定长参数
func add(desc string, num ...int) (sum int, err error) {
	for _, v := range num {
		sum += v
	}
	err = nil
	return sum, err
}
  • 函数参数
func main() {
   cal(1, 2, add)
}

func add(num ...int) {
   sum := 0
   for _, v := range num {
      sum += v
   }
   fmt.Println(sum)
}

func cal(a, b int, f func(num ...int)) {
   f(a, b)
}
  • defer应用场景

defer会在当前函数return前执行,常用来关闭连接,锁等,先定义的defer后执行

func main() {
   defer fmt.Println("第一次定义")
   defer fmt.Println("第二次定义")
   fmt.Println("主函数输出")
}

主函数输出
第二次定义
第一次定义

  • 异常处理error
func main() {
   if _, err := er(); err != nil {
      fmt.Println(err)
   }
}

func er() (int, error) {
   return 0, errors.New("定义了一个error")
}
  • 异常处理panic
func main() {
   fmt.Println("panic之前的函数")

   panic("后面的统统不执行了")

   fmt.Println("不会执行的函数")
}
  • 异常处理recover

recover会接收panic报错,需要提前定义

func main() {
   p()
}

func p() {
   defer func() {
      if r := recover(); r != nil {
         fmt.Println("recover接收到了一个panic", r)
      }
   }()
    // map初始化不给空间会报错
   var names map[string]string
   names["go"] = "go"
   return
}
posted @ 2023-03-11 21:35  ForLivetoLearn  阅读(11)  评论(0编辑  收藏  举报