mirror of
https://github.com/crazybber/awesome-patterns.git
synced 2024-11-22 04:36:02 +03:00
added iota constants
This commit is contained in:
parent
967befa56b
commit
fc102d573f
52
concurrency/basic_channel_error_handling/main.go
Normal file
52
concurrency/basic_channel_error_handling/main.go
Normal file
@ -0,0 +1,52 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
|
||||
func fetchAll() error {
|
||||
var N = 4
|
||||
quit := make(chan bool)
|
||||
errc := make(chan error)
|
||||
done := make(chan error)
|
||||
for i := 0; i < N; i++ {
|
||||
go func(i int) {
|
||||
// dummy fetch
|
||||
time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
|
||||
err := error(nil)
|
||||
if rand.Intn(2) == 0 {
|
||||
err = fmt.Errorf("goroutine %d's error returned", i)
|
||||
}
|
||||
ch := done // we'll send to done if nil error and to errc otherwise
|
||||
if err != nil {
|
||||
ch = errc
|
||||
}
|
||||
select {
|
||||
case ch <- err:
|
||||
return
|
||||
case <-quit:
|
||||
return
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
count := 0
|
||||
for {
|
||||
select {
|
||||
case err := <-errc:
|
||||
close(quit)
|
||||
return err
|
||||
case <-done:
|
||||
count++
|
||||
if count == N {
|
||||
return nil // got all N signals, so there was no error
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
fmt.Println(fetchAll())
|
||||
}
|
22
idiom/iota_const/main.go
Normal file
22
idiom/iota_const/main.go
Normal file
@ -0,0 +1,22 @@
|
||||
package main
|
||||
|
||||
import "github.com/davecgh/go-spew/spew"
|
||||
|
||||
type FeedLockLinkType int
|
||||
|
||||
const (
|
||||
Racing FeedLockLinkType = iota
|
||||
Market
|
||||
)
|
||||
|
||||
var feedLockLinkTypes = [...]string{
|
||||
"racing.Races.raceID",
|
||||
"racing.Markets.marketID",
|
||||
}
|
||||
|
||||
func (f FeedLockLinkType) String() string { return feedLockLinkTypes[f] }
|
||||
|
||||
func main() {
|
||||
test := FeedLockLinkType(Racing)
|
||||
spew.Dump(test)
|
||||
}
|
Loading…
Reference in New Issue
Block a user