Consider this:

```go
if b.Config.Multilingual {
    // Special path, with language concerns
    b.serveMultilingual(rw, req)
    return
}

// Normal path, without any language concerns
posts := b.postMngr.GetAllPosts()
b.tmplMngr.DoWithIndex(func(t *template.Template) {
  if err := t.Execute(rw, posts); err != nil {
    b.Err("serving index request, %v", err)
    http.Error(rw, err.Error(), http.StatusInternalServerError)
    return
  }
})
```
In another func:

```go
func (b *Brog) serveMultilingual(rw http.ResponseWriter, req *http.Request) {
  lang := extractLang(req.URL.RawQuery) // Magically defined somewhere
  if lang == "" {
     b.redirectToLangSelection(rw, req)
     return  
  }
  // Don't need to pass the whole RawQuery, also don't need the bool isMultilingual
  posts := b.postMngr.GetAllPostsWithLanguage(lang) 
  b.tmplMngr.DoWithIndex(func(t *template.Template) {
    if err := t.Execute(rw, posts); err != nil {
      b.Err("serving index request, %v", err)
      http.Error(rw, err.Error(), http.StatusInternalServerError)
      return
    }
  })
}

func (b *Brog) redirectToLangSelection(rw http.ResponseWriter, req *http.Request) {
  b.Debug("Language not set for multilingual blog")
  b.tmplMngr.DoWithLangSelect(func(t *template.Template) {
     b.Debug("Sending language selection screen")
     if err := t.Execute(rw, b.Config.Languages); err != nil {
       b.Err("serving index, language select, request, %v", err)
       http.Error(rw, err.Error(), http.StatusInternalServerError)
       return
     }
  })
}
```

The pattern here is that for every special case in your current function, you branch and delegate to another function.  Then you carry on with normal business.