Go语言视频学习笔记-------函数

函数

函数可返回多个值,还可以给返回的多个值起名字,起名字仅用于非常简单的函数

func eval(a,b int ,op string) int {
   switch op{
   case "+":
      return a+b
   case "-":
      return a-b
   case "*":
      return a*b
   case "/":
      q,_:=div1(a,b) //调用下文的除法,只返回除数,余数可以用下划线代替
      return q
      //return a/b
   default:
      panic("unsupported operation: "+op)

   }
}
//根据可以有两个返回值,我们可以写eval函数为把错误抛出,返回值的常用场景,用于返回error的情况
func eval1(a,b int ,op string) (int,error) {
   switch op{
   case "+":
      return a+b,nil
   case "-":
      return a-b,nil
   case "*":
      return a*b,nil
   case "/":
      q,_:=div1(a,b) //调用下文的除法,只返回除数,余数可以用下划线代替
      return q,nil
      //return a/b
   default:
         return 0,fmt.Errorf("unsupported operation : %s" ,op)
   }
}
//除数与余数函数
func div0(a,b int) (int,int){
   return a/b,a%b
}
//如果返回值过长,建议用div0
func div1(a,b int)(q,r int){
   q=a/b
   r=a%b
   return
}

func main() {
   //fmt.Println(eval(3,4,"c"))
   if result,err:=eval1(3,4,"c"); err != nil{
      fmt.Println("error:",err)
   }else{
      fmt.Println(result)
   }
   fmt.Println(div0(13,3))
   //接收两个返回值
   q,r:=div1(13, 3)
   println(q,r)
}

go语言是函数式编程,函数的参数可以是函数

上述eval方法可以实现如下:

func apply(op func(int,int) int,a,b int) int{
   p:=reflect.ValueOf(op).Pointer()
    opName:=runtime.FuncForPC(p).Name()
   fmt.Println("Calling function with %s args"+"(%d,%d)",opName,a,b)
    return op(a,b)
}
func pow(a,b int) int{
   return int(math.Pow(float64(a),float64(b)))
}
func main() {
   fmt.Println(apply(pow,3,4))
   //也可以不用重写pow函数,直接写匿名函数,输出结果为main.main.func1第一个main是包名,第二个main是主函数,func1是这个匿名函数
   fmt.Println(apply(func(a,b int) int{
      return int(math.Pow(float64(a),float64(b)))
   },3,4))
   fmt.Println(sumArgs(1,2,3,4,5))
}

go语言中函数参数可变,入参可以是可变参数列表,用起来像数组一样用
func sumArgs(values ...int) int{
   s:=0
   for i:=range values{
      s+=values[i]

   }
   return s
}
func main() {
   fmt.Println(sumArgs(1,2,3,4,5))
}

 

函数语法要点:

  • 返回值类型写在最后面
  • 可返回多个值
  • 函数可作为参数
  • 没有默认参数可选参数
  • 有可变参数列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值