package main
import (
"fmt"
"math"
"reflect"
"runtime"
)
// 一个返回值函数
func testfn1(a int,b int) int {
return a + b
}
// 多个返回值函数
func testfn2(a int, b int)(c int, d string) {
c = a + b
d = "haha"
return c,d
}
// 还可简写成
func testfn3 (a int, b int) (int, string) {
return a + b, "haha"
}
// 可以新增报错参数
func testfn4 (a int, b int) (int,error) {
if b > 4 {
return 0,fmt.Errorf("错了%d",b)
} else {
return b, nil
}
}
// 函数可以作为参数
func testfn5(op func (int, int) int, a, b int) int {
p := reflect.ValueOf(op).Pointer()
opName := runtime.FuncForPC(p).Name() // 获取到函数名字
fmt.Println(opName) // main.main.func1 包名.入口函数名.函数名
return op(a,b)
}
// 函数的可变参数列表
func sum(numbers ...int) int {
s := 0
for i := range numbers {
s += numbers[i]
}
return s
}
func main() {
fmt.Println(testfn1(1,2))
fmt.Println(testfn2(1,2))
fmt.Println(testfn3(1,2))
// 接受函数其中一个返回值
num, _ := testfn3(1,2) // 用_表示不接收该参数
fmt.Println(num)
fmt.Println(testfn4(1,5))
// 传递函数参数
testfn5(func(a int, b int) int {
return int(math.Pow(float64(a),float64(b)))
},1,2)
// 可变参数 函数调用
fmt.Println(sum(1,2,3))
}