[1] combines the loads into a MOVQ. But the bounds checks are all still there.
0x000f 00015 (/home/khr/go/tmp1.go:6) MOVQ "".a+16(FP), CX
0x0014 00020 (/home/khr/go/tmp1.go:6) CMPQ CX, $8
0x0018 00024 (/home/khr/go/tmp1.go:6) JLE $0, 95
0x001a 00026 (/home/khr/go/tmp1.go:7) CMPQ CX, $0
0x001e 00030 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x0020 00032 (/home/khr/go/tmp1.go:7) CMPQ CX, $1
0x0024 00036 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x0026 00038 (/home/khr/go/tmp1.go:7) CMPQ CX, $2
0x002a 00042 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x002c 00044 (/home/khr/go/tmp1.go:7) CMPQ CX, $3
0x0030 00048 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x0032 00050 (/home/khr/go/tmp1.go:7) CMPQ CX, $4
0x0036 00054 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x0038 00056 (/home/khr/go/tmp1.go:7) CMPQ CX, $5
0x003c 00060 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x003e 00062 (/home/khr/go/tmp1.go:7) CMPQ CX, $6
0x0042 00066 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x0044 00068 (/home/khr/go/tmp1.go:7) CMPQ CX, $7
0x0048 00072 (/home/khr/go/tmp1.go:7) JLS $0, 88
0x004a 00074 (/home/khr/go/tmp1.go:7) MOVQ "".a+8(FP), CX
0x004f 00079 (/home/khr/go/tmp1.go:7) MOVQ (CX), CX
0x0052 00082 (/home/khr/go/tmp1.go:7) MOVQ CX, "".~r1+32(FP)
0x0057 00087 (/home/khr/go/tmp1.go:7) RET
0x0058 00088 (/home/khr/go/tmp1.go:7) PCDATA $0, $0
0x0058 00088 (/home/khr/go/tmp1.go:7) CALL runtime.panicindex(SB)
0x005d 00093 (/home/khr/go/tmp1.go:7) UNDEF
0x005f 00095 (/home/khr/go/tmp1.go:9) MOVQ $0, "".~r1+32(FP)
0x0068 00104 (/home/khr/go/tmp1.go:9) RET