目录
函数
一个函数多个返回值
函数多个返回值用来返回错误,防止程序中断
函数式编程
函数作为参数
可变参数列表
函数
package main
import "fmt"
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("unsupported operation: " +op)
}
}
func main() {
fmt.Println(eval(3, 4, "*"))
}
一个函数多个返回值
// 一个函数返回多个值
// 15 / 4 =3...3
func div(a, b int) (int, int){
return a/b, a%b
}
一个函数返回多个值(改良版)
// 15 / 4 =3...3
func div(a, b int) (q, r int){
return a/b, a%b // 建议使用,return 计算,这样变量多不怕混淆
}
func main() {
q, r := div(15, 4)
}
函数多个返回值用来返回错误,防止程序中断
一个函数返回多个值不要随便用,一般用来返回错误,防止程序中断
package main
import (
"fmt"
)
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 "/":
q, _ := div(a, b) //用 _ 代替不需要使用的变量,防止变量没 有使用编译报错
return q, nil
default:
return 0, fmt.Errorf("unsupported operation: %s", op)
}
}
func main() {
if result, err :=eval(15, 4, "X"); err!=nil{
fmt.Println("Error: ", err)
}else {
fmt.Println(result)
}
}
函数式编程
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)", opName, a, b)
return op(a, b)
}
func pow(a, b int) int{
return int(math.Pow(float64(a),float64(b)))
}
fmt.Println(apply(pow, 3, 4))
函数作为参数
fmt.Println(apply(func(a, b int) int{
return int(math.Pow(float64(a),float64(b)))
},3,4)) //调用匿名函数
可变参数列表
// 可变参数列表
func sum(numbers ...int) int{
sum := 0
for i := range numbers {
sum += numbers[i]
}
return sum
}