Tag Archives: patterns
Clean architecture pattern
The main idea is to have layers that only depend on inner layers (see the image below). Let’s imagine you have a repository that includes several applications. Layers Domain (Entities) Has basic types and interfaces for your application. Including the application config and Registry with all the interfaces. Optionally could also include some common logic …
Golang patterns. Worker pool
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("worker", id, "started job", j) time.Sleep(time.Second) fmt.Println("worker", id, "finished job", j) results <- j * 2 } } func main() { // In order to use our pool of workers we need to send // them work and collect their results. We make 2 // channels for this. jobs := make(chan int, 100) results := make(chan int, 100) // This starts up 3 workers, initially blocked // because there are no jobs yet. for w := 1; w <= 3; w++ { go worker(w, jobs, results) } // Here we send 5 `jobs` and then `close` that // channel to indicate that's all the work we have. for j := 1; j <= 5; j++ { jobs <- j } close(jobs) for a := 1; a <= 5; a++ { <-results } } |
Further reading: https://gobyexample.com/worker-pools
Microservice architecture patterns
Why do you need a microservice architecture? Decrease blast radius of problems and increase flexibility. You want technology diversity in your company. You want to scale your app more granular according to consumer needs. You want newcomers to be productive earlier. You want your company structure to be mirrored with technical responsibilities (it’s mainly about …