https://chenhe.me/post/pointer-and-interface-in-go