title: Full IDE features support for golang in Doom Emacs
body: <p>I'm a vim user for years and start to play emacs recently, after having tried Spacemacs and Prelude, Doom Emacs is my final choose. I'm configuring golang development those days with (go +lsp) and (lsp) module, and all the out-of-box features of Doom are impressive, thanks for your outstanding job hlissner.</p>
  
  <p>Now I'm happy with the basic features like:</p>
  
  <p>Auto completion</p>
  
  <ul>
  <li>flycheck</li>
  <li>snippets</li>
  <li>other go-mode features</li>
  </ul>
  
  <p>But to be more productive, I want more IDE-like features such as:</p>
  
  <ul>
  <li>Navigation: Until now I only found counsel-imenu by which I can select symbols in current buffer(candidates not grouped by method/function/var/const/interface and so on), but how could I do things like:
  
  <ul>
  <li>Find symbols in a project</li>
  <li>Find Interfaces in a project</li>
  <li>Find Structs in a project</li>
  <li>Find methods in a project</li>
  <li>Find exported functions, maybe in a specified package</li>
  <li>Switch back and force between source code and related test file/method</li>
  <li>And so on...</li>
  </ul></li>
  <li>More sophisticated actions to generate/operate code: snippets and go-gen-test are a great help, but is it possible to do the following this:
  
  <ul>
  <li>Code actions to generate undeclared method/field/function/package in different scope, now it seems it can only generate variable. (Is this based on the lsp backend support? I found a  video for java but not able to find one for go)</li>
  <li>Auto-generate methods template if I specify an Interface to implement for a Struct</li>
  <li>Remove methods from a struct</li>
  <li>Auto-remove relative test/bench functions if I remove a function/method</li>
  </ul></li>
  </ul>
  
  <p>Could anybody help me on this? And any experiences/tips are appreciated.</p>