Go言語で文字の切り捨てを行う際はrunewidth.Truncateがとても便利だった
Go言語を学習しながら触っている際の備忘録。
Go言語でターミナル周りのテキストを、いい感じに切り捨て(Truncate)するときは go-runewidth
がとても便利だった。
(最初、苦労しながら自身でTruncate処理をコツコツ書いていたので runewidth.Truncate
を見つけたときはちょっとした感動を覚えた)
サンプルコードはこちら。
package main import ( "fmt" "github.com/mattn/go-runewidth" ) func main() { width := 10 fmt.Println(runewidth.Truncate("ABCDEFGHJIKLMNOQPRSTUVXWYZ", width, "...")) fmt.Println(runewidth.Truncate("あいうえおかきくけこさしすせそ", width, "...")) fmt.Println(runewidth.Truncate("01234567890123456789", width, "...")) fmt.Println(runewidth.Truncate("01234567890123456789", width, "...")) fmt.Println(runewidth.Truncate("ABCあいうえおかきくけこさしすせそ", width, "...")) fmt.Println(runewidth.Truncate("あいうABCDFEGHIJK", width, "...")) fmt.Println(runewidth.Truncate("0123456789012345", width, "...")) }
ターミナル上での文字幅の微妙なズレについて
ただ、上のコードを実行した際に微妙なズレが生じる。
これは自身が使用しているフォントの問題なのか、それとも文字の表示的にしょうがないことなのか、そこについてはこれから調べていくという感じである。
ターミナル周りのテキスト幅についての知見が自分にはほとんどないので、知っている方からすれば当たり前のことに疑問をいだいているのかもしれないが...