mirror of
https://github.com/crazybber/awesome-patterns.git
synced 2024-11-25 14:26:04 +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