stringsというpackageの中にIndexというそれっぽい関数があるが、これはbyteとしての位置を返すためちょっと工夫が必要
package main import ( "fmt" "strings" "unicode/utf8" ) func main() { text := "下手糞の 上級者への 道のりは 己が下手さを 知りて一歩目。" if i := strings.Index(text[0:], "己"); i > 0 { fmt.Println("byte-pos:", i, "rune-pos:", utf8.RuneCountInString(text[0:i])) } } // byte-pos: 42 rune-pos: 16
半角スペースはbyteのカウントには含まれてないし結構ハマった