贝利信息

如何在 Windows 上使用 Go 获取终端宽度

日期:2026-01-18 00:00 / 作者:聖光之護

本文介绍在 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 仍是当前最实用、兼容性最优的方案——只需牢记“先初始化,再读取,最后关闭”三步原则即可稳健运行。