Skip to content

Подробнее о сравнении строк

Ранее упоминалось, что сравнение двух строк фактически сравнивает их базовые байты. Как правило, компиляторы Go делают следующие оптимизации для сравнения строк.

  • Для сравнений \== и !\=, если длины сравниваемых двух строк не равны, эти две строки также не должны быть равны (нет необходимости сравнивать их байты).

  • Если их базовые указатели последовательности байтов сравниваемых двух строк равны, то результат сравнения будет таким же, как при сравнении длин двух строк.

Таким образом, для двух равных строк временная сложность их сравнения зависит от того, равны ли их базовые указатели на последовательность байтов. Если они равны, то временная сложность равна О(1), в противном случае временная сложность равна О(n), где n — длина двух строк.

Как упоминалось ранее, для стандартного компилятора Go при назначении строкового значения целевое строковое значение и исходное строковое значение будут совместно использовать одну и ту же базовую последовательность байтов в памяти. Таким образом, стоимость сравнения двух строк становится очень небольшой.

Пример:

Самое время протестировать код!

Вывод:

1мс это 1000000нс! Поэтому старайся избегать сравнения двух длинных строк, если они не используют одну и ту же базовую последовательность байтов.