mb_strpos

mb_strpos

[code]
package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(mb_strpos("聚合科技有限公司", "科技"))                       // 2
    fmt.Println(mb_strpos("聚合科技--有限公司", "公司"))                     // 8
    fmt.Println(mb_strpos("https://www.juhe.cn/ 聚合数据-科技公司", "数据")) // 23
}

func mb_strpos(haystack, needle string) int {
    index := strings.Index(haystack, needle)
    if index == -1 || index == 0 {
        return index
    }
    pos := 0
    total := 0
    reader := strings.NewReader(haystack)
    for {
        _, size, err := reader.ReadRune()
        if err != nil {
            return -1
        }
        total += size
        pos++
        // got it
        if total == index {
            return pos
        }
    }
}

[/code]