This highlights my biggest criticism with Go (although I am a fan generally), the lack of a great IDE with powerful refactoring, debugging, test runner integration etc. These tools can be a great advantage of having a strongly typed static language. The current options are below par, hopefully jetbrains will step up and fill the void.
General response to comments:
I think some people may not have seen what you can do with a good IDE and a strongly typed static language. Want to rename a function throughout the entire app and guarantee it works, no problem. How about moving a file and having all the imports changed to the new location, easy. You can't do that in ruby, but in Go/Java/C# it should be trivial with good tooling. If that does exist I would love to see it.
That doesn't necessarily invalidate the parent's statement "the lack of a great IDE with powerful refactoring, debugging, test runner integration etc".
These tools actually do exist for Go, they just aren't packaged in an IDE. The biggest problem with them is (in my opinion), a lack of documentation around the usefulness and use of these tools. Tools like gofmt allow for automated formatting, mass renaming, and import moving, for example.
One of the things I think it great about Go is how easy the developers of Go have made it for other people to tie into the Go compiler's lexical analyzer, giving it an easy API to work with and making it a core package, which is why there are so many mutant compilers built for Go. Using these, I think it would actually be very easy to write a powerful IDE for Go, it just hasn't been done yet because I think Go's target audience (systems programmers) are not all that interested in IDE's, but that is just conjecture. Right now, the closest you can get to an IDE experience is to use the faith's vim-go set of plugins for vim, which allow you to map keys for all of the basic IDE functions and even allow you to browse compilation errors and formatting errors in a seperate pane with controls to navigate to the line in files where those errors occurred. If you are not comfortable with vim, however, I do not know of any alternatives at this time.
I haven't done this myself, but I have read that you can use the gdb to debug Go code.
> because I think Go's target audience (systems programmers) are not all that interested in IDE's,
Target audience or not; it seems that most people that write about Go and state their background have a background in some scripting/dynamic language. But those are the people that write about stuff like that; they may be a vocal minority, for all I know. But Pike has written that he was surprised that relatively few from languages like C++ has made a transition.
I don't get why you're being downvoted. I write Go professionally and I've been doing all of my work in Go for 2 years. I used Sublime/vim/emacs, and I'm very productive without an IDE.
Still, there are many features of IDE's I wish we had, like extensive refactoring. I was making heavy use of those in Java.
It's very easy to write software that manipulates Go code, so I know it's just a matter of time before all those equivalent (and more!) tools get out. So much that I feel a lot more productive in Go today than I ever was in another language before. Go works really well without an IDE, but just imagine how much more you could get done with an environment that ships out of the box with comprehensive tooling for refactoring, debugging, profiling, etc.
I think it's counter productive to not acknowledge, or be dismissive, of what comprehensive IDE support can provide to your productivity in a stack. Tooling in Go is awesome, but there are gaps. Debuggers and more-than-gorename refactorings are to big bullet points in my personal list.
As others have said, gorename does the type-safe renaming... it's relatively new, so it's understandable that you may not have heard of it.
Moving a file doesn't really make any sense in Go. Files are not units of code that you'd move... I presume you mean moving an exported type from one package to another. I don't believe that gorename can do that right now, but it seems like it would be pretty easy to add to gorename.
Go has really good tools. oracle, godoc, go test, go fix, imports , built in memory profiler, built in cpu profiler, full auto complete and error highlighting in multiple text editors (sublime, emacs, vim) and an automatic code formatter.
I don't think you understand how you are meant to use the tools if you think they need to be in an ide to be useful.
A suggestion: I think your statement would be much better received if you phrased it positively, rather than negatively. "Go is great; here's how I use it" is much more helpful than "Go is great; you're doing it wrong".
I have no objection to your editing your comment to include a summary of how you put the go pieces together. Redemption is so much better than guilt ;-)
Most Java developers I know write code using Intellij. I used to use VIM for Ruby development and tricked it out with many features to speed up my development. Having said that, Intellij is so much easier to use for Java than tricked out VIM is for Ruby.
Visual Studio with ReSharper is also great (when working with C# code). It really makes you develop code faster. I suppose CodeRush works equally well.
> General response to comments: I think some people may not have seen what you can do with a good IDE and a strongly typed static language.
Personally I'm not sceptical towards IDEs because I don't see the use in them. I'm sceptical towards IDEs because they are so integrated. In Go's case, if they want all the functionality of a modern IDE (at least eventually), I'm guessing they will realize it by putting a bunch of already existing tools (like a debugger, renamer, formatter, etc.) together. I guess this means that all the tools could be used individually, but also as more of a whole. And also this "whole" can be adjusted on a per need basis. Go might be opinionated about the formatting of Go code, but should there be an IDE that is opinionated about the kind of editor one uses to code Go in? (Maybe this isn't inherent to IDEs, but it seems to be what happens.) Rob Pike might prefer to use the Acme editor, others might prefer Emacs or Vim (and not just "emacs keybindings").
I think a lot of people are sceptical against combination of small tools since you tend to end up having to learn how to combine them, which may or may not be easy.
There is nothing stopping Google from developing an IDE that internally uses a lot of small tools (refactoring parser etc) and also makes the same tools availible as separate things from the command line. I still think the visual feedback from a good IDE is worthwile and the user interface is usually much easier to work with.
General response to comments: I think some people may not have seen what you can do with a good IDE and a strongly typed static language. Want to rename a function throughout the entire app and guarantee it works, no problem. How about moving a file and having all the imports changed to the new location, easy. You can't do that in ruby, but in Go/Java/C# it should be trivial with good tooling. If that does exist I would love to see it.