package util import ( "strings" gp "github.com/mozillazg/go-pinyin" ) var ( fullArgs = func() gp.Args { a := gp.NewArgs() a.Style = gp.Normal a.Fallback = func(r rune, _ gp.Args) []string { return []string{strings.ToLower(string(r))} } return a }() initialArgs = func() gp.Args { a := gp.NewArgs() a.Style = gp.FirstLetter a.Fallback = func(r rune, _ gp.Args) []string { s := strings.ToLower(string(r)) if s == "" { return nil } return []string{string(s[0])} } return a }() ) // ToPinyin converts a Chinese name to full pinyin and initials. // Non-Chinese characters are kept as-is (lowercased). // Example: "茅台酒" → ("maotaijiu", "mtj") func ToPinyin(s string) (full, initials string) { var fb, ib strings.Builder for _, row := range gp.Pinyin(s, fullArgs) { if len(row) > 0 { fb.WriteString(row[0]) } } for _, row := range gp.Pinyin(s, initialArgs) { if len(row) > 0 { ib.WriteString(row[0]) } } return fb.String(), ib.String() }