福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

インタフェースの都合で引数が決まってくるときに残りの引数をどうやって渡すか

手癖でGoを書いてて最近やっと気付いたんだけどスタイルが2種類あるんだなと。いやGoに限らないけども。 インタフェースの都合で引数が決まってくるときに残りの引数をどうやって渡すかというのがあって オブジェクトのプロパティとメソッドで役割分担をすると

// controller.go
type controller struct {
    conf Config
}
func (con *controller) FooHandler(c *gin.Context) {
    c.JSON(200, gin.H{"foo": con.conf.foo})
}

// router.go
con := controller{conf}
r.GET("/foo", con.FooHandler)

みたいな感じになって、JavaScriptみたいにクロージャを使うと

// controller.go
func FooHandler(c *gin.Context, conf Config) {
    c.JSON(200, gin.H{"foo": conf.foo})
}

// router.go
r.GET("/foo", func (c *gin.Context) {
    return FooHandler(c, conf)
})

みたいな感じ。