golang常用库之-pkg/term包、moby.term包、go-runewidth包 | 返回用户终端的当前宽度和高度、获取字符或字符串的固定宽度 | 基于文本的界面的库ui

本文介绍了Golang中几个常用的终端库,包括pkg/term、moby.term、go-runewidth及gdamore/tcell。这些库提供了对终端尺寸、字符宽度等特性的控制,并展示了如何使用这些库来获取终端的宽度和高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang常用库之-pkg/term包、moby.term包、go-runewidth包、gdamore/tcell包

pkg/term包

https://github.com/pkg/term

Package term manages POSIX terminals. As POSIX terminals are connected to, or emulate, a UART, this package also provides control over the various UART and serial line parameters.

term包管理 POSIX 终端。此程序包还提供了对各种UART和串行线参数的控制。

moby.term包

官网:https://github.com/moby/term

term provides structures and helper functions to work with terminal (state, sizes).
term 提供结构体和helper函数关于终端(状态,大小)。

官方demo:打印终端大小。

package main

import (
	"log"
	"os"

	"github.com/moby/term"
)

func main() {
	fd := os.Stdin.Fd()
	if term.IsTerminal(fd) {
		ws, err := term.GetWinsize(fd)
		if err != nil {
			log.Fatalf("term.GetWinsize: %s", err)
		}
		log.Printf("%d:%d\n", ws.Height, ws.Width)
	}
}

使用场景

常用于命令行程序最大给定列数打印给定名称命令行标志集。

根据终端列长度,调试命令行打印的格式。

demo:返回用户终端的当前宽度和高度

package main

import (
	"fmt"
	"io"
	"os"

	"github.com/moby/term"
)

// TerminalSize returns the current width and height of the user's terminal. If it isn't a terminal,
// nil is returned. On error, zero values are returned for width and height.
// Usually w must be the stdout of the process. Stderr won't work.
func TerminalSize(w io.Writer) (int, int, error) {
	//GetFdInfo返回操作系统的文件描述符。文件并指示该文件是否表示终端。
	outFd, isTerminal := term.GetFdInfo(w)
	if !isTerminal {
		return 0, 0, fmt.Errorf("given writer is no terminal")
	}
	//GetWinsize根据指定的文件描述符返回窗口大小。
	winsize, err := term.GetWinsize(outFd)
	if err != nil {
		return 0, 0, err
	}
	return int(winsize.Width), int(winsize.Height), nil
}

func main() {
	cols, height, _ := TerminalSize(os.Stdout)
	fmt.Printf("Width: %v, Height: %v", cols, height)
}

代码解释:
TerminalSize返回用户终端的当前宽度和高度。如果它不是终端,返回nil。出错时,宽度和高度返回零值。通常w必须是进程的标准输出。Stderr不起作用。
程序返回终端的宽度和高度。

mattn/go-runewidth包

githu: https://github.com/mattn/go-runewidth

提供功能以获取字符或字符串的固定宽度。

使用

runewidth.StringWidth("つのだ☆HIRO") == 12

gdamore/tcell包- 基于文本的界面的库ui

github: https://github.com/gdamore/tcell

tcell是一个GO软件包,为文本终端提供基于单元格的视图,例如Xterm。它的灵感来自Termbox,但包括许多其他改进。用于基于文本的界面的库ui。

可以做出类似如下效果:
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值