1. Accept interfaces, return structs
https://dev.to/lcaparelli/should-my-methods-return-structs-or-interfaces-in-go-3b7

2. Try to avoid using pointer
https://blog.maxkit.com.tw/2015/08/null-null-reference-is-billion-dollar.html