Go语言中文网 为您找到相关结果 12

go的匿名函数和闭包

go的匿名函数: func no_func() { // 匿名函数 1 f := func(i, j int) (result int) { // f 为函数地址 result = i + j return result } fmt.Fprintf(os.Stdout, "f = %v f(1,3) = %v\n", f, f(1, 3)) // 匿名函数 2 func(i, j int) (m, n int) { // x y 为函数返回值 return j, i }(1, 9) // 直接创建匿名函数并执行 } go的闭包: func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum...阅读全文

博文 2015-07-20 15:00:01 webyh

Go语言闭包的小例子

例子1 package main import ( "fmt" ) func main() { f := closer(10) //fmt.Println(f(1)) //fmt.Println(f(2)) f(1) f(2) } func closer(x int) func(int) int { fmt.Printf("%p\n", &x) return func(y int) int { fmt.Printf("%p\n", &x) return x + y } } 打印结果是: 0x118400e8 0x118400e8 0x118400e8 例子2 package main import ( "fmt" ) func main() { for i := 0; i < 3; i++ ...阅读全文

博文 2014-12-20 19:00:02 itfanr

Golang 闭包

package main import ( "fmt" ) func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum } } func main() { pos, reg := adder(), adder() for i := 0; i < 10; i++ { fmt.Println( i, //sum[i] = i pos(i), //pos(i) = pos(i).sum + i reg(-2*i), //reg(-2 * i) = reg(i) + (-2*i) ) } } 输出: API server listening at: 127.0.0.1:26756 0 0 0 1...阅读全文

博文 2019-03-01 14:34:47 钾肥尔德

golang并发----安全的关闭通道

在接收方从通道内拿到所有数据后发送一个done来通知发送方关闭channel func worker(msg chan string, done chan bool) { for { select { case <-done: fmt.Println("Done.") close(msg) return default: msg<-"hello world." time.Sleep(500*time.Millisecond) } } } func main() { msg := make(chan string) done := make(chan bool) timeout := time.After(5 * time.Second) // 将done传入worker 如果main接收完成...阅读全文