Есть ли в Go функция indexOf?

Иль придется искать нужный элемент через range и if внутри. Если нет, то какой быстрый вариант можно сделать (быстрый, в смысле по скорости).


Ответы (1 шт):

Автор решения: dikey0ficial

К сожалению, такая функция отсутствует. В таких случаях всё же используется for-range цикл с проверкой внутри. Пример:

package main

import "fmt"

func indexOf(arr []string, need string) int {
    for ind, val := range arr {
        if val == need {
            return ind
        }
    }
    return -1
}

func main() {
    arr := []string{"foo", "bar"}
    fmt.Println(indexOf(arr, "foo")) // Output: 0
    fmt.Println(indexOf(arr, "qwe")) // Output: -1
}

Дженерики уже в бете версии Go 1.18 (UPD: Go 1.18 уже вышел), и поэтому можно сделать такую реализацию функции:

func indexOf[T any](arr []T, need T) int {
    for ind, val := range arr {
        if val == need {
            return ind
        }
    }
    return -1
}

и вызывать через indexOf[string]([]string{"qwe", "42"}, "123") или же без типа: indexOf([]string{"qwe", "42"}, "123")

→ Ссылка