Как найти индекс персонажа в Голанге?

Я пытаюсь найти строковый символ "@" в Go, но я не могу найти способ сделать это. Я знаю, как индексировать символы типа "HELLO [1]", который выводит "E". Однако я пытаюсь найти номер индекса найденного char.

В Python я бы сделал это следующим образом:

x = "[email protected]"
split = x.find("@")
chars = x[:split]
arefun = x[split+1:]

>>>print split
5
>>>print chars
chars
>>>print arefun
arefun

Таким образом, символы возвращают "символы" и будут возвращены "arefun" при использовании "@". Я пытался найти решение часами, и я не могу найти подходящий способ сделать это в Голанге.

Ответы

Ответ 1

Вы можете использовать функцию Index пакета strings

Игровая площадка: https://play.golang.org/p/_WaIKDWCec

package main

import "fmt"
import "strings"

func main() {
    x := "[email protected]"

    i := strings.Index(x, "@")
    fmt.Println("Index: ", i)
    if i > -1 {
        chars := x[:i]
        arefun := x[i+1:]
        fmt.Println(chars)
        fmt.Println(arefun)
    } else {
        fmt.Println("Index not found")
        fmt.Println(x)
    }
}

Ответ 2

Если вы ищете символы, отличные от ASCII (на других языках, кроме английского), вы должны использовать http://golang.org/x/text/search.

func SubstringIndex(str string, substr string) int, bool {
    m := search.New(language.English, search.IgnoreCase)
    start, _ := m.IndexString(str, substr)
    if start == -1 {
        return start, false
    }
    return start, true
}

index, found := SearchForStringIndex('Aarhus', 'Å');
if found {
    fmt.Println("match starts at", index);
}

Найдите language.Tag structs here, чтобы найти язык, который вы хотите найти, или используйте language.Und, если вы не уверены.