最近在开发caddy的插件, 碰到了很多以前不怎么注意的地方, 先重点记录下几个点.
写插件比较追求的一点是: 如何不破坏原有的体系而达到想要的效果. 这个确实有点难…
结构体匿名成员
有关结构体匿名成员在《Effective Go》中的embedding一节讲的很详细, 一言一蔽之: 另一种形式的继承. 如果B类型中包含了A类型的匿名成员, 则B类型的实例拥有(继承)了所有A类型实现的方法.
看个简单的例子:
这个小程序运行后会输出:
PlaySay()ZZZYYYSay()
type assertion
Play()_, ok := p.(XXX)ServeHTTP(w http.ResponseWriter, r *http.Request)http.ResponseWriterresponseWriterWrapperWriteHeader(status int)
这个最好的解决办法是原生支持这么一个hook~