Принимая это простое сравнение loopValue == "Firstname"
, выполняется следующее утверждение?Сравнение строк на базовом языке
Если внутренний операнд проверки первого
char
не соответствует по сравнению строки, это будет рано прервать
Так принимая сырую форму loopValue
и "Firstname"
являются как []byte
. И это было бы прогулка массив вроде так, как петля обратного вызова для истины:
someInspectionFunc(loopValue, "Firstname", func(charA, charB) {
return charA == charB
})
... что делает его продолжайте идти, пока не натыкается false
и проверяет, является ли число iterations
было равно как их длины , Также он сначала проверяет длину?
if len(loopValue) != len("Firstname") {
return false
}
Я не могу найти объяснение в go
исходного кода на GitHub, как это немного выше меня.
Причина, по которой я прошу об этом, заключается в том, что я занимаюсь большой обработкой данных и выполняю сравнительный анализ и делаю CPU, память и распределение pprof
, чтобы выжать еще немного сока из процесса. Из этого процесса это заставило меня подумать, как Go (но и просто C в целом) будет делать это под капотом. Является ли это полностью на уровне сборки или сравнение уже происходит в коде Go Go (вроде как наброски в приведенных выше фрагментах)?
Пожалуйста, дайте мне знать, если я слишком расплывчата или если что-то пропустил. Спасибо
Update
Когда я сделал firstCharater
матч в больших струнах json
до действительно сравнения я получил около 3.7%
бенчмаркинг прибыли от 100k тяжелых записей:
<some irrelevant inspection code>.. v[0] == firstChar && v == lookFor {
// Match found when it reaches here
}
код выше (особенно на длинных струнах) быстрее, чем просто для v == lookFor
.
да, это делается в сборке, по функции «runtime · eqstring» – JimB
Спасибо за ваш ответ JimB. Вы знаете, как проходит этот процесс? Всегда ли она полностью итеративно и/или сравнивает длину переменной или отменяет ее раньше, когда равная глубина индекса больше не соответствует? –
нет, он всегда сравнивает длину в первую очередь. нет причин для повторения, если они не имеют одинаковой длины. – JimB