本文介绍在 windows 系统中使用 go 语言安全、可靠地获取当前终端窗口的字符宽度(列数)与高度(行数),重点解决 `termbox-go` 初始化遗漏导致返回 `0 0` 的常见问题,并提供完整可运行示例与注意事项。
在 Windows 平台上,Go 标准库本身不直接提供跨平台的终端尺寸查询接口(如 Unix 系统下的 ioctl(TIOCGWINSZ)),因此需依赖第三方库。其中 github.com/nsf/termbox-go 是一个成熟、轻量且 Windows 兼容性良好的选择——但其核心约束常被忽略:必须显式调用 termbox.Init() 完成底层终端驱动初始化后,才能正确读取尺寸;否则 termbox.Size() 恒返回 (0, 0)。
以下是正确用法的完整示例:
package main
import (
"fmt"
"log"
"github.com/nsf/termbox-go"
)
func main() {
// 必须先初始化 termbox
if err := termbox.Init(); err != nil {
log.Fatal("无法初始化 termbox:", err)
}
defer termbox.Close() // 确保退出前释放资源
width, height := termbox.Size()
fmt.Printf("终端宽度:%d 字符,高度:%d 行\n", width, height)
}✅ 关键要点说明:

⚠️ 常见误区提醒:
综上,对于 Windows 环境下需要精确终端尺寸的 CLI 工具开发,termbox-go 仍是当前最实用、兼容性最优的方案——只需牢记“先初始化,再读取,最后关闭”三步原则即可稳健运行。