Advanced Dependency
Management in
Go using Fx
Preslav Mihaylov
Slide 2
Slide 2 text
Software Engineer @ Uber
Tech. Trainer & Speaker
✍ Blogging at pmihaylov.com
Open-sourcing at
github.com/preslavmihaylov
Slide 3
Slide 3 text
3
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Here’s what’s coming...
Managing Component Dependencies via Manual Wiring
Using Dependency Injection and Fx Framework
Structuring code into reusable Fx modules
Slide 4
Slide 4 text
Managing
Component Dependencies
via Manual Wiring
Slide 5
Slide 5 text
5
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Manual Wiring == Manually Injecting Dependencies
Slide 6
Slide 6 text
6
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
An Example Hello World Web Application
DEMO
Slide 7
Slide 7 text
7
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Manual Wiring - Pros & Cons
Code is easy to understand
No magic behind the scenes
Hard to maintain for large
projects
Every project has to deal with the
“things every service needs”
Slide 8
Slide 8 text
Using
Dependency Injection and
Fx Framework
Slide 9
Slide 9 text
9
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Fx == Dependency Injection App Framework
Slide 10
Slide 10 text
10
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Fx == DI Application Framework
DI Framework?
Component wiring is done
automatically for you
App Framework?
The entire app lifecycle is
managed rather than it being a
plug-n-use library
Slide 11
Slide 11 text
11
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
So, what does it do?
Slide 12
Slide 12 text
12
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
At its core,
it simply manages providers and receivers
Slide 13
Slide 13 text
13
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Providers say
“Here’s an instance of this component.
Use it as you please…”
Slide 14
Slide 14 text
14
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Receivers say
“I need an instance of components X, Y, Z.
Please provide them to me…”
Slide 15
Slide 15 text
15
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
What Fx does is to
connect providers to receivers
Slide 16
Slide 16 text
16
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Refactoring our Web App
DEMO
Slide 17
Slide 17 text
17
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Using a DI Framework - Pros & Cons
Component Wiring is MUCH
easier
Less code => Less work
Enables reusable modules
Project onboarding is tougher
Harder to debug & trace apps
Slide 18
Slide 18 text
Structuring Your Code
Into Reusable Fx Modules
Slide 19
Slide 19 text
19
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Fx Modules
allow you to extract code into
separate independent layers/packages
Slide 20
Slide 20 text
20
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
However, they are especially useful
in a microservice environment
Slide 21
Slide 21 text
21
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
All services need some baseline infra
health checks, logging, tracing, metrics, configs...
Slide 22
Slide 22 text
22
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Accounting Tax Calculations Trip Dispatcher
Infrastructure
Module
Infrastructure
Module
Infrastructure
Module
Slide 23
Slide 23 text
23
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Modularizing our Web App
DEMO
Slide 24
Slide 24 text
Conclusion
Slide 25
Slide 25 text
25
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Manual wiring
works well for small to medium-size apps
Slide 26
Slide 26 text
26
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
A Dependency Injection Framework (Fx)
allows your servicce to scale \w more components
Slide 27
Slide 27 text
27
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Modularizing your Application enables
your services to reuse common dependencies
you to create boundaries across your application
Slide 28
Slide 28 text
28
Advanced Dependency Management in Go using Fx
Preslav Mihaylov
00/00/2020
Wanna go the extra mile?
Practice setting up & using Fx here and here
See how it’s done in Java by Google
Slide 29
Slide 29 text
29
Talk’s name - Speaker
00/00/2020
Powered by
Preslav Mihaylov
[email protected]