go函式作為一等民

2022-06-10 12:00:14 字數 2922 閱讀 1243

package main

import "fmt"

type operation func(a, b int) int

func add(a, b int) int

func main()

package main

import "fmt"

type operation func(a, b int) int

func add(a, b int) int

type calculator struct

func (c *calculator) do(op operation, a int)

func main()

import "fmt"

type operation func(b int) int

func add(b int) operation

return addb

}func main()

package main

import "fmt"

type operation func(b int) int

func add(b int) operation

return addb

}type calculator struct

func (c *calculator) do(op operation)

func main()

package main

import "fmt"

type operation func(b int) int

func add(b int) operation

}

閉包是指有權訪問另乙個函式作用域中變數的函式,不需要傳值。閉包一定是在乙個函式內部的,但是閉包不等於匿名函式。

乙個函式可以是匿名函式,但可以不是閉包。

func main() 

for i, v := range s1 ()

} time.sleep(time.second)

}

輸出

3 4

3 43 4

3 4

這是為什麼?

因為沒有傳值,所有所有的goroutine都共享i, v,go的排程始終不會快過順序執行的**。

如何修正?

func main() 

for i, v := range s1 (i, v)

} time.sleep(time.second)

}

此時的輸出順序取決於go的排程了,但是會將s1內的元素都輸出出來

package main

import (

"fmt"

"sync"

)type peer struct

func (p *peer) writemsg(msg string)

type host struct

func newhost() *host

return h

}func (h *host) addpeer(p *peer)

func (h *host) getpeer(pid string) *peer

func (h *host) removepeer(pid string)

func (h *host) broadcastmsg(msg string)

}

package main

import "fmt"

type peer struct

func (p *peer) writemsg(msg string)

type host struct

}func newhost() *host ),

} return h

}func (h *host) start()

func (h *host) stop()

func (h *host) loop()

case

return

} }}func (h *host) addpeer(p *peer)

func (h *host) removepeer(pid string)

func (h *host) broadcastmsg(msg string)

func main()

package main

import "fmt"

type peer struct

func (p *peer) writemsg(msg string)

type operation func(peers map[string]*peer)

type host struct

}func newhost() *host ),

} return h

}func (h *host) addpeer(p *peer)

h.opch

}func (h *host) removepeer(pid string)

h.opch

}func (h *host) broadcastmsg(msg string)

} h.opch

}func (h *host) getpeer(pid string) *peer

go func() ()

return

}func (h *host) loop()

}}

四)一等函式

一等物件滿足以下條件 執行時建立 能賦值給變數或資料結構中的元素 能作為引數傳給函式 能作為函式的返回結果。整數 字串 字典以及函式,都是一等物件。一 把函式視作物件 可以把函式進行賦值呼叫 二 高階函式 1 接受函式為引數,或者把函式作為返回結果的函式是高階函式 high order 如上例的ma...

一等公民的函式

所謂的 一等公民 指的是函式與其他的資料型別可以同等對待,如存入陣列,作為引數等等。先看個例子 const hi name hi const greeting name hi name 這裡的對hi這個函式又給與了重新的傳參操作,其實大可不必如此,因為hi已經被函式定義過了,在函式程式設計的思維中,...

Scala中的本地函式與作為語言一等公民的函式詳解

內容 1 本地函式 實戰 函式內部函式 2 作為一等公民的函式的 實戰 var increase x int x 1 println increase 10 increase x int x 9999 將函式 一等公民 作為乙個值進行賦值 def processdata filename strin...