1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| package main
import ( "fmt" "math" "reflect" "runtime" )
func eval(a, b int, op string) int{ switch op { case "+": return a+b case "-": return a-b case "*": return a*b case "/": return a/b default: panic("不支持的类型 %s" + op) } }
func div(a, b int) (int, int){ return a/b, a%b }
func div2(a, b int) (q, r int){ return a/b, a%b
}
func div3(a int)(int ,error){ return a, fmt.Errorf("返回错误演示") }
func apply(op func(int ,int) int, a, b int) int { p := reflect.ValueOf(op).Pointer() opName := runtime.FuncForPC(p).Name() fmt.Printf("调用的函数为 %s, 参数为 (%d, %d)", 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 , "+"), eval(3, 4 , "-"), eval(3, 4 , "*"), eval(3, 4 , "/"), )
fmt.Println(div(1, 2)) q, r := div2(2,3) fmt.Println(q, r)
if result1, result2 := div3(1); result2 != nil{ fmt.Println(result2) }else{ fmt.Println(result1) }
fmt.Println(apply(pow, 3, 4))
fmt.Println(apply(func(i int, i2 int) int { return int(math.Pow(float64(i), float64(i2))) }, 3, 4))
fmt.Println(sum(1,2,3,3,4,4,5,5,5,6)) }
|