https://notes.shichao.io/gopl/ch9/