Go函数学习

Go语言函数特性详解
 1 package main
 2 
 3 import (
 4     "fmt"
 5     "reflect"
 6     "runtime"
 7     "math"
 8 )
 9 
10 //函数
11 //函数可以返回两个值。返回多个值时可以起名字
12 //返回值类型写在最后面
13 //函数可以作为参数
14 //没有默认参数,可选参数
15 
16 func eval( a, b int , op string) ( int , error) {
17     switch op {
18     case "+":
19         return a + b , nil
20     case "-":
21         return a - b , nil
22     case "*":
23         return a * b , nil
24     case "/":
25         q, _ := div(a , b)  //下划线表示不想用那个返回值
26         return q , nil
27     default:
28         return 0 , fmt.Errorf("unsupported operation: %s" , op )
29     }
30 }
31 
32 func div( a, b int ) ( int , int)  {
33     return a / b, a % b
34 }
35 
36 func apply( op func( int , int ) int , a, b int ) int {  //参数名写在前,类型写在后
37     p := reflect.ValueOf(op).Pointer()
38     opName := runtime.FuncForPC(p).Name()
39     fmt.Printf("calling function %s with agrs" + "(%d,%d)  ",opName,a,b)
40     return op(a , b)
41 }
42 
43 func pow( a, b int) int {
44     return int (math.Pow( float64(a),float64(b)))
45 }
46 
47 func sum( numbers ...int) int {   //...传可变参数列表
48     s := 0
49     for i := range numbers {
50         s += numbers[i]
51     }
52     return  s
53 }
54 func main() {
55     if result , err := eval( 3,4,"x"); err != nil {
56         fmt.Println("Error",err)   //Error unsupported operation: x
57     }else {
58         fmt.Println(result)
59     }
60     fmt.Println(eval(3, 4, "*"))  // 12 <nil>
61     fmt.Println(eval(3, 4, "/"))  // 0  <nil>
62     fmt.Println( div(13 , 3))         // 4 1
63     fmt.Println(apply( pow,3,4))   //calling function main.pow with agrs(3,4)  81
64 
65     fmt.Println(apply(
66         func(a int, b int) int {
67             return int( math.Pow(
68                 float64(a), float64(b) ))
69         },3,4,
70     ))   //calling function main.main.func1 with agrs(3,4)  81
71 
72     fmt.Println(sum(1,2,3,4,5))  //15
73 }

 

转载于:https://www.cnblogs.com/yuxiaoba/p/9307177.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值