<pre class="notranslate">The spec seems to allow package main to import another package main under another name.
However, the experience with the go tool is inconsistent:

% cd $GOPATH/src/foo
% cat a/a.go
package main

import _ "foo/b"

func init() { println("init: a") }
func main() {}
% cat b/b.go
package main

func init() { println("init: b") }
func main() {}
% rm -f $GOPATH/bin/a
% rm -f $GOPATH/bin/b
% go install ./a
% touch a/a.go
% go install ./a
# foo/a
a/a.go:3: can't find import: "foo/b"
% 

My setup:

% go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/p/go"
GOROOT="/usr/local/Cellar/go/1.0.3"
GOTOOLDIR="/usr/local/Cellar/go/1.0.3/pkg/tool/darwin_amd64"
CGO_ENABLED="1"
%</pre>
<pre class="notranslate">Looking at a liveness bitmap while debugging a garbage collector crash (probably caused
by a linker bug):

(gdb) x/16xw 'fmt.Sprintf.gclocals·0'
0x10b780 &lt;fmt.Sprintf.gclocals·0&gt;:   0x00000005  0x00000006  0x00000004  0x00000006
0x10b790 &lt;fmt.Sprintf.gclocals·0+16&gt;:    0x00000004  0x00000006  0x00000005  0x00000006
0x10b7a0 &lt;fmt.Sprintf.gclocals·0+32&gt;:    0x00000005  0x00000006  0x00000004  0x00000000
0x10b7b0 &lt;fmt.Sprintf.gclocals·0+48&gt;:    0x00000000  0x00000000  0x00000000  0x00000000
(gdb)

That's 5 bitmaps, each of 6 bits, and the bit pattern is sometimes 4 sometimes 5.
The corresponding pcdata is:

fmt.Sprintf pcdata=1:
0-30: -1 (really 0)
30-98: 1
98-131: 2
131-165: 3
165-208: 4

A few observations:

The default padding to 16 bytes is not helping; if we record an explicit alignment
for the symbol we can pad only to 4-byte boundaries, which will cut the size of
the symbol from 16 words to 11.
The bitmap size is the same for all bitmaps and could be stored just once.
That would cut the size of the symbol from 11 words to 7.
Bitmaps with the same bits could be stored just once for a given symbol.
That would cut the size of the symbol from 7 words to 4.
A global dedup might be interesting too but this local dedup might be an easier first
step.
In aggregate these changes would be a 4x reduction for this simple case and probably at
least 2x overall.

Should do for Go 1.3 to reduce memory footprint but not immediately urgent.</pre>