i++

プログラム系のメモ書きなど

golang : 見た目が同じ長さの文字列を作成する(等幅フォント)

等幅フォントで表示する時に同じ長さに見えるような文字列を生成する。

// "github.com/mattn/go-runewidth" を使用。

func makeFixedWidthString(str string, length int) string {
    var buffer bytes.Buffer
    l := 0
    for _, c := range str {
        cl := runewidth.RuneWidth(c)
        if l + cl > length {
            break
        }
        buffer.WriteRune(c)
        l += cl
    }
    for i := 0; i < length - l; i++ {
        buffer.WriteRune(' ')
    }
    return buffer.String()
}

以下に関連しているものの、日本語と英語が交じると見た目上の長さがずれてしまったので、別途対応。あまりきちんと調べていないので、対応出来ていないケースがあるかも。

increment.hatenablog.com