В Go нет встроенной функции для разворота строки. Причина — строка хранится как последовательность байтов, а не символов. Для работы с текстом (особенно с кириллицей, эмодзи и т.п.) нужно конвертировать строку в []rune.

Способ 1. Разворот через []rune

Простой и универсальный вариант:

func reverse(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

Способ 2. Только ASCII

Если гарантирован только ASCII, можно работать напрямую с байтами:

func reverseASCII(s string) string {
    b := []byte(s)
    for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
        b[i], b[j] = b[j], b[i]
    }
    return string(b)
}

Итого:

  • []rune — правильно для любых символов Unicode, чуть медленнее.
  • []byte — быстрее, но работает только для ASCII.