wat betreft je programma: hij doet niet wat je wilt omdat b een lokale variabel is. met &b wilde je eigenlijk een pointer pakken naar een entry binnen a. maar je hebt in feite een pointer gepakt naar de lokale variabel b. die b wordt gemuteerd door de range call, en de laatste mutatie zet de waarde van b op 9. daarom print het programma alleen maar 9
probeer dit eens:
// Fill the pointer slice with the contents of the int slice
for i, _ := range a {
pa = append(pa, &a[i])
}