docs: async function syncRoutes (dir, routes, opts) {
    let text = routes.map(it => {
      return `\tapp.Handle("${it.modalName}", "${it.actionName}", func(ctx interface{}, ctrl sav.Controller, handler sav.DataHandler, extra interface{}) {
  ${it.routeBody}
  \t})`
    }).join('\n')
    let data = `${noticeString}package ${opts.packageName}
  
  import (
  \t"github.com/savfx/savgo/sav"
  \t"github.com/savfx/savgo/server/sgin"
  \t"github.com/savfx/savgo/util/convert"
  )
  
  func registerRoutes(app sgin.GinApplication) {
  ${text}
  }
  `
    let file = path.resolve(dir, 'routes.go')
    if (await pathExists(file)) {
      let src = await inputFile(file)
      if (data === src.toString()) {
        return
      }
    }
    await outputFile(file, data)
  }