元ネタ: Goでマルチバイトが混在した文字列をtruncateする
さらに文字幅で切り落としたい、そんな場合は go-runwidth が使えます。
package main
import (
"fmt"
"github.com/mattn/go-runewidth"
"strings"
)
func main() {
s := "ああaaああ"
r := []rune(s)
// 5文字目まで切りたい
fmt.Println(string(r[0:5])) //=> ああaaあ
// 半角5文字で切りたい
fmt.Println(runewidth.Truncate(s, 5, ""))
// 画面幅(80文字)で切り、途切れるなら ... を付けたい
fmt.Println(runewidth.Truncate(strings.Repeat("あ", 60), 80, "..."))
}