Вот одна версия, которая избегает вызова на append
и обрабатывает крайний случай, когда смещение не требуется:
func translation(s []int, n int) []int {
n = n % len(s)
if n == 0 {
return s // efficiency where a shift would not be necessary
}
// pre-alloc slice and avoiding a realloc if one were to use `append`
r := make([]int, len(s))
copy(r, s[n:])
copy(r[n:], s[:n])
return r
}