at backyard

Color my life with the chaos of trouble.

Go言語での文字の切り捨て(Truncate)について

Go言語で文字の切り捨てを行う際はrunewidth.Truncateがとても便利だった

Go言語を学習しながら触っている際の備忘録。

Go言語でターミナル周りのテキストを、いい感じに切り捨て(Truncate)するときは go-runewidth がとても便利だった。
(最初、苦労しながら自身でTruncate処理をコツコツ書いていたので runewidth.Truncate を見つけたときはちょっとした感動を覚えた)

github.com

サンプルコードはこちら。

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, "..."))
}

ターミナル上での文字幅の微妙なズレについて

ただ、上のコードを実行した際に微妙なズレが生じる。

f:id:shinshin86:20211126095801p:plain

これは自身が使用しているフォントの問題なのか、それとも文字の表示的にしょうがないことなのか、そこについてはこれから調べていくという感じである。

ターミナル周りのテキスト幅についての知見が自分にはほとんどないので、知っている方からすれば当たり前のことに疑問をいだいているのかもしれないが...