// Go goruntine 调用的办法,防止开启的go 协程异样,导致退出func Go(x func()) {    go func() {        defer func() {            if err := recover(); err != nil {                fmt.Println(err)            }        }()        x()    }()}func GoParams(x func(interface{}, interface{}), a1, a2 interface{}) {    go func() {        defer func() {            if err := recover(); err != nil {                fmt.Println(err)            }        }()        x(a1, a2)    }()}Go中 函数的写法大全//写法1,一般写法(举荐)func div1(a, b int) (int, int) {    return a / b, a % b // 返回多个值,此处返回两个数的商和余数}//写法2,为返回值定义名称,此种形式 仅用于逻辑非常简单的函数// 多返回值,不能随便应用,个别用法是 第一个为业务返回值,第二个为 错误信息func div2(a, b int) (q, r int) {    q = a / b    r = a % b    return}//写法3,函数式编程,能够将函数的输出参数定义为函数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)    fmt.Println()    return op(a, b)}//写法4,可变参数列表func sum(numbers ...int) int {    s := 0    for i := range numbers {        s += numbers[i]    }    return s}//写法5,值传递与 指针传递//Go 中所有的 参数传递 都是 值传递,然而增加一些操作能够批改为指针传递// * 代表指针传递func swap(a, b *int) {    *a, *b = *b, *a}////定义一个匿名函数并间接调用// func(){//     //函数体// }()