この話は有名だからググればいくつもでるが素人にも分かりやすそうだったので

GoのTUIで表示が崩れる場合
https://noborus.github.io/blog/runewidth/

Ambiguous width(曖昧幅)
ターミナル上のアプリケーション(TUI)では、GUIと違って文字単位で描画されます。
そして1文字の幅は固定されていて、アルファベットは1文字分とすると日本語などは2文字分使用する、
いわゆる半角全角の世界です。 ただし、既にUnicode(UTF-8)が標準となっているので、
バイト数と文字幅は関係しないようになっています。

Unicodeでは幅が決まっている文字がほとんどですが、一部に「Ambiguous; 曖昧」とされている文字があります。

以前は英語圏のアプリケーションではASCIIの範囲内のみを使用していて「Ambiguous」な範囲の文字を使用するのは、
それ以外の地域の人だったため、全角幅で問題になることは無かったのですが、Unicodeの使用が拡大するにつれて
英語圏の方が作るアプリケーションでも「Ambiguous」な幅の文字が使用されることが増えてきました。

特にTUIアプリケーションでは、罫線「┌ ├ ─ ┘等」を使用して枠線を表現することがあります。
これが「Ambiguous」な幅として、英語圏では1文字幅で表示できる様になっているため、
2文字幅と解釈して表示しようとすると表示が崩れてしまいます。