乐趣区

关于golang:Golang-启动Go-协程的使用技巧

// 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(){
//     // 函数体
// }()
退出移动版