go_函数
2024-08-22 05:47:31
函数语法要点
返回值类型写在最后面
可返回多个值
函数可作为参数
没有默认参数,可选参数,只有可变参数列表(...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
最新文章
- 博客的QQ群群规
- 利用logminer恢复delete误删除操作的数据
- 在sap系统设置纸张打印格式(针式打印机)
- outlook新邮件到达提醒设置以及outlook最小化到托盘设置
- ASP.NET MVC4学习笔记之Controller的激活
- [转载]linux sed命令详解
- Codeforces Round #224 (Div. 2)
- 基于邻接表的广度优先搜索遍历(bfs)
- (原)vs2013静态及动态链接opencv3.0的库
- Android 震动马达系统
- C#语法——泛型的多种应用
- ajax、axios、fetch之间的详细区别以及优缺点
- demo:动态生成专属二维码
- VC++编写简单串口上位机程序
- C# 3.0 / C# 3.5 自动属性
- ROC,AUC,Precision,Recall,F1的介绍与计算(转)
- win8共享文件设置 详细教程
- 从nodejs到在线商城
- consumer的DubboResponseTimeoutScanTimer线程
- Elasticsearch6.3 使用jdbc连接