(IMHO - assuming vgo would care about this)
About branches:
Having branches for major versions helps greatly. A major version can literally be a whole different package by breaking the API or even introducing a completely new one.
However keeping some previous major versions might be desirable and different branches help with hotfixes. The pattern of having master, develop, release-*, hotfix-*, support-*, etc is pretty common (outside of Go world).
At the same time being forced to maintain the major version inside import paths (as in `import "gopkg.in/some-package.v3"`) is not desirable too.
It would be nice if vgo could handle something like (in .mod files) `pkg >1.2.1 branch-name-*` and the `*` part could be a major number and the `1.2.1` is tag. The `branch-name-*` part is a pattern for branch name.
The only part remaining, is how the editors should show the source (with goto definition) which can be solved by have physical different directories for different branches.