Peguei isso com o código-fonte da biblioteca padrão. Eu modifiquei um pouco para torná-lo mais sucinto. Muito útil quando você deseja passar por uma fatia, mas não pode usar um buffer.
type buffer []byte
func (buf *buffer) next(n int) (b buffer) {
b = *buf
b, *buf = b[:n], b[n:]
return
}
func main() {
block := make([]byte, 10)
buf := buffer(block)
copy(buf.next(5), "aaa")
copy(buf.next(5), "bbb")
fmt.Println(block) // [97 97 97 0 0 98 98 98 0 0]
}