// splitFirstMaxTwitterContent 查找到对应第一个截断位置后输出切割后的左右字符串
func splitFirstMaxTwitterContent(content string) (left string, right string) {
contentLen := len(content)
if contentLen <= twitterMaxLength {
// 可以看到这里计算长度都是按 Unicode 的方式去查找,避免出现中文乱码
runeContent := []rune(content)
runeIdx := sort.Search(len(runeContent), func(i int) bool {
_, isExceed := calculateTwitterRuneContentLen(runeContent[:i])
return string(runeContent[:runeIdx]), string(runeContent[runeIdx:])
func calculateTwitterRuneContentLen(runeContent []rune) (int, bool) {
tweetLen := len(runeContent) + (len(string(runeContent))-len(runeContent))/2
return tweetLen, tweetLen >= twitterMaxLength