函数语法要点

返回值类型写在最后面

可返回多个值

函数可作为参数

没有默认参数,可选参数,只有可变参数列表(...int)

package main

import (
"fmt"
"reflect"
"runtime"
"math"
) func eval(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 "/":
//result = a/b
//两个返回值中取其中一个返回值
q,_ :=div(a,b)
return q,nil
default:
return 0,fmt.Errorf(
"unsupported operation %s ",op,
)
}
} //返回多个值
func div(a,b int) (q,r int){
//q = a / b
//r = a % b
//return
return a / b, a % b
} //函数里面的参数可以时函数
func apply(op func(int, int) int, a, b int) int {
p:=reflect.ValueOf(op).Pointer()//获取函数的指针
opName:=runtime.FuncForPC(p).Name()
fmt.Printf("Calling function %s with args" +
"(%d,%d)\n",opName,a,b)
return op(a,b)
} func pow(a,b int) int {
return int(math.Pow(float64(a),float64(b)))
} func sum(numbers ...int) int{
s := 0
for i := range numbers{
s += numbers[i]
}
return s
}
func main() {
//fmt.Println(
// eval(3,4,"x"),
//)
//q,r :=div(13,3)
//fmt.Println(q,r) fmt.Println(apply(func(a int, b int) int {
return int(math.Pow(float64(a),float64(b)))
},3,4))
fmt.Println(apply(pow,3,4))
fmt.Println(sum(1,2,3,4,5))
}

  闭包函数保存并积累其中的变量的值,不管外部函数退出与否,它都能够继续操作外部函数中的局部变量。

package main

import "fmt"

func main() {
var f = Adder()
fmt.Print(f(1), " - ")
fmt.Print(f(20), " - ")
fmt.Print(f(300))
} func Adder() func(int) int {
var x int
return func(delta int) int {
x += delta
return x
}
}

  

输出:

1 - 21 - 321

最新文章

  1. 博客的QQ群群规
  2. 利用logminer恢复delete误删除操作的数据
  3. 在sap系统设置纸张打印格式(针式打印机)
  4. outlook新邮件到达提醒设置以及outlook最小化到托盘设置
  5. ASP.NET MVC4学习笔记之Controller的激活
  6. [转载]linux sed命令详解
  7. Codeforces Round #224 (Div. 2)
  8. 基于邻接表的广度优先搜索遍历(bfs)
  9. (原)vs2013静态及动态链接opencv3.0的库
  10. Android 震动马达系统
  11. C#语法——泛型的多种应用
  12. ajax、axios、fetch之间的详细区别以及优缺点
  13. demo:动态生成专属二维码
  14. VC++编写简单串口上位机程序
  15. C# 3.0 / C# 3.5 自动属性
  16. ROC,AUC,Precision,Recall,F1的介绍与计算(转)
  17. win8共享文件设置 详细教程
  18. 从nodejs到在线商城
  19. consumer的DubboResponseTimeoutScanTimer线程
  20. Elasticsearch6.3 使用jdbc连接

热门文章

  1. Python——深浅Copy
  2. flask之bootstrap4
  3. 以Linux下的测试程序说明递归型互斥量和普通互斥量的区别
  4. 初识C++模板元编程(Template Mega Programming)
  5. Java中的强制类型转换
  6. poj 3977 Subset(折半枚举+二进制枚举+二分)
  7. 2017百度之星初赛A-1006(HDU-6113)
  8. node的express中间件之bodyParser
  9. js内置对象中获取时间的用法--通过date对象获取。
  10. java基础循环