Go 语言 在线

2195go-function-closures

闭包带参数补充:

package main
import "fmt"
func main() {
    add_func := add(1,2)
    fmt.Println(add_func(1,1))
    fmt.Println(add_func(0,0))
    fmt.Println(add_func(2,2))
} 
// 闭包使用方法
func add(x1, x2 int) func(x3 int,x4 int)(int,int,int)  {
    i := 0
    return func(x3 int,x4 int) (int,int,int){ 
       i++
       return i,x1+x2,x3+x4
    }
}

2194go-function-closures

带参数的闭包函数调用:

package main

import "fmt"
func main() {
    add_func := add(1,2)
    fmt.Println(add_func())
    fmt.Println(add_func())
    fmt.Println(add_func())
}

// 闭包使用方法
func add(x1, x2 int) func()(int,int)  {
    i := 0
    return func() (int,int){
        i++
        return i,x1+x2
    }
}

2193go-function-as-values

函数作为参数传递,实现回调。

package main
import "fmt"

// 声明一个函数类型
type cb func(int) int

func main() {
    testCallBack(1, callBack)
    testCallBack(2, func(x int) int {
        fmt.Printf("我是回调,x:%d\n", x)
        return x
    })
}

func testCallBack(x int, f cb) {
    f(x)
}

func callBack(x int) int {
    fmt.Printf("我是回调,x:%d\n", x)
    return x
}

2192go-nested-loops

九九乘法表:

package main 

import "fmt"

func main() {
    for m := 1; m < 10; m++ {
    /*    fmt.Printf("第%d次:\n",m) */
        for n := 1; n <= m; n++ {
            fmt.Printf("%dx%d=%d ",n,m,m*n)
        }
        fmt.Println("")
    }
}

2191go-select-statement

以下实例中有两个 case,每执行一次,会随机进入其中一个 case,结论是 select 会循环检测条件,如果有满足则执行并退出,否则一直循环检测。

package main
import "fmt"


func Chann(ch chan int){
    var i int
    i = 10
    ch <- i
}
func main(){
    
    ch := make(chan int)
    c := 0
    
    go Chann(ch)
    select{
    case c  = <- ch:
        fmt.Println("Recvice", c)
        fmt.Println("channel")
    case s := <-ch:
        fmt.Println("Receive", s)
    //default:
        //fmt.Println("Error")
    }
}