Golang Go语言中如何获取当前终端窗口的宽度和高度呢?

小弟想使用 termui 来进行终端作图,输出一些简单的图形,但是固定宽度在不同的电脑上可能会出现不同的显示问题,所以想请教各位大大,请问 go 语言如何获取当前终端窗口的宽度和高度呢?谢谢大家
Golang Go语言中如何获取当前终端窗口的宽度和高度呢?

5 回复

用 go 来实现 terminal 就知道了~

更多关于Golang Go语言中如何获取当前终端窗口的宽度和高度呢?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不同的操作系统, 获取方法不一样

主要是调用 stty 命令, 但是 Windows 要用 CON device, 然后还有的系统用 tput 命令

这个可以,非常感谢

在Go语言中,获取当前终端窗口的宽度和高度并不是一个内置的功能,但可以通过一些外部库和平台特定的API来实现。一个常用的方法是使用golang.org/x/crypto/ssh/terminal包,该包提供了对终端的访问功能,但需要与操作系统的一些交互。

以下是一个使用terminal包获取终端窗口大小的示例代码(注意,这仅适用于Unix-like系统,如Linux和macOS):

package main

import (
	"fmt"
	"golang.org/x/crypto/ssh/terminal"
	"os"
	"syscall"
)

func main() {
	fd := int(os.Stdin.Fd())
	if terminal.IsTerminal(fd) {
		width, height, err := terminal.GetSize(fd)
		if err != nil {
			fmt.Println("Error getting terminal size:", err)
			return
		}
		fmt.Printf("Terminal size: width=%d, height=%d\n", width, height)
	} else {
		fmt.Println("Standard input is not a terminal.")
	}
}

需要注意的是,terminal.GetSize函数在Windows上可能不适用,对于Windows系统,你可能需要使用github.com/mattn/go-colorablegithub.com/gabriel-vasile/mimetype等库结合Windows API来获取窗口大小。

此外,确保在运行上述代码时,程序是在一个真实的终端窗口中运行的,而不是在某些IDE的内置控制台中,因为这些环境可能不支持获取终端尺寸的操作。

回到顶部