ChungMingSu2

第 10177 号会员 /

回复了 创建的主题:

func fibonacci(c, quit chan int) {
x := 0
c<-x
for {
select {
case <-c:
fmt.Println("进", x+1)
x++
d<-x
case <-quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
q := make(chan int)
d := make(chan int)
go func() {
for i := 0; i < 5; i++ {
fmt.Println("出", <-d, i)
c<-i
}
q <- 0
}()
fibonacci(c, q)
fmt.Println("Hello")
}


结果可能為:
进 1
出1 0

进 2
出 2 1
进 3
出3 2

进 4
出 4 3
进 5
出5 4
進6
quit

用channel wait的方式控制執行順序



![](https://is.golangtc.com/avatar/ChungMingSu2.png?width=32&height=32&mode=fill)










Markdown所见即所得
提    交

回复了 ChungMingSu2 创建的主题: X12 EDI parser 剖析器程式 在區塊鏈上可傳EDI訊息的程式會用到

請參考最新EDI訊息在區塊鏈上傳輸的技術趨勢文章
https://www.forbes.com/sites/forbestechcouncil/2019/04/03/will-blockchain-replace-edi-yes-and-no/
請參考X12 EDI 簡介的網頁資料
https://edi3.dicentral.com/ansi-x12
請按下面的鏈結看原始碼
Code Issues 

Golang X12 parser
 Star 23
 Watch


master

Latest commit by azoner over 4 years ago
 View code Jump to file

README.md

gox12

golang X12 non-validating parser

!\[Build Status\]\(https://camo.githubusercontent.com/180d0f2f0310377016fa0af5c68a95d127559d18/68747470733a2f2f7472617669732d63692e6f72672f617a6f6e65722f676f7831322e706e67\)

Installation

go get github.com/azoner/gox12

View all of README.md

Releases

v0.1.0 published almost 6 years agoView all 1 releases

Issues

There are no recent issues.
View all issues

Pull requests

There are no recent pull requests.
View all pull requests

  • Desktop version

回复了 ChungMingSu2 创建的主题: Go語言 generator功能

## Go Language Patterns
Search this site
#### The Authorryannedolan.info
#### Recent site activity

Concurrency‎ > ‎
### Generators
Generators are functions that return the next value in a sequence each time the function is called:

generateInteger() => 0
generateInteger() => 1
generateInteger() => 2
....
This pattern can be used to implement iterators and introduce parallelism into loops.  Generators in Go are implemented with goroutines, though in other languages coroutines are often used.

## ParallelismIf the generator's task is computationally expensive, the generator pattern can allow a consumer to run in parallel with a generator as it produces the next value to consume.  For example, the goroutine behind the "produce" generator below can execute in parallel with "consume".

for {
consume(produce())
}
In some cases, the generator itself can be parallelized.  When a generator's task is computationally expensive and can be generated in any order (constrast with iterators), then the generator can be parallelized internally:

func generateRandomNumbers (n int) {
ch := make (chan float)     sem := make (semaphore, n)     for i := 0; i < n; i++ {``        go func () {
ch <- rand.Float()
sem.Signal()         } ()``    }     // launch extra goroutine to eventually close ch     go func () {         sem.Wait(n)         close(ch)     }         return ch``}### UsageThe following for-loop will print 100 random numbers.  The random numbers are generated in parallel and arrive in a random order.  Since the order doesn't matter, this prevents us from blocking unnecessarily.

for x := range generateRandomNumbers(100) { fmt.Println(x) }Note that generating random numbers in this way isn't very practical, since the parallelizing random number generator probably isn't worth the overhead of spawning so many goroutines.

登入|最近的協作平台活動|檢舉濫用情形|[列印頁面](javascript:;)|由 **Google 協作平台**技術提供