<story><title>Stages of learning Go, with code examples</title><url>https://sourcegraph.com/blog/live/gopherconindia/112025389257</url></story><parent_chain><item><author>bonn1</author><text>Just wondering, does Go finally has a package manager with proper versioning of modules?&lt;p&gt;&lt;i&gt;Edit: Somebody is heavily downvoting me on every reply, I would love to know why. I like Go and want to get into it since a few months but the missing package manager held me off. So what is wrong about my question?&lt;/i&gt;</text></item></parent_chain><comment><author>NateDad</author><text>You really don&amp;#x27;t need a package manager for Go.  Honestly, the main reason you need them for node, python, etc is because you&amp;#x27;re deploying source code to your production environment.  You don&amp;#x27;t do that with Go.  You deploy a binary, which has everything wrapped up in itself.  Think of it as a self-contained virtualenv that requires zero effort on your part :)&lt;p&gt;In Go, code is packaged via source control repos.  If you want a different version, you need a different repo.  There are some tools to mitigate this, so that you can get away with a different branch per version (see &lt;a href=&quot;http://gopkg.in&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;gopkg.in&lt;/a&gt;), which can make it a little nicer for the maintainer to deal with multiple branches.  To the consumer, it still looks like a different repo (i.e. every different version is a different URL to a repo).&lt;p&gt;Note that because Go is a compiled language, the only time versioning comes into play is a &lt;i&gt;development time&lt;/i&gt;.  As long as your developers are using the right version, you never have to worry about versions during deployment.&lt;p&gt;Now, if you&amp;#x27;re concerned that your project depends on code repos from external sources, then there are several tools that can insulate you from third parties doing stupid stuff.  The most complete and best one is called godep, which basically has two modes - reliable and paranoid.  The reliable mode insulates you from changes made to a repo you depend on by recording the exact VCS revision your project is using and always checks out that commit.  That way, if an upstream repo checks in a breaking change, it won&amp;#x27;t affect you (and you control when you update to newer commits in that repo).  Paranoid mode actually copies all the code from your dependencies into your own repo. This insulates you from upstream repos getting deleted.  And of course, this gives you the ability to test out upstream changes before integrating them into your project.  The tool makes it easy to copy all of your dependencies at once with a single command, so it&amp;#x27;s not a huge hassle to do (which it would be if you had to do it by hand).</text></comment>
<story><title>Stages of learning Go, with code examples</title><url>https://sourcegraph.com/blog/live/gopherconindia/112025389257</url></story><parent_chain><item><author>bonn1</author><text>Just wondering, does Go finally has a package manager with proper versioning of modules?&lt;p&gt;&lt;i&gt;Edit: Somebody is heavily downvoting me on every reply, I would love to know why. I like Go and want to get into it since a few months but the missing package manager held me off. So what is wrong about my question?&lt;/i&gt;</text></item></parent_chain><comment><author>bbrazil</author><text>The closest is godep, which lets you take snapshots.&lt;p&gt;We&amp;#x27;re having lots of fun with this with Prometheus, quite a bit of work is ongoing to get it into Debian due to this for example.</text></comment>