使用 golang 在 Windows 中获取终端宽度

Get terminal width in Windows using golang

Go中可以获取终端宽度吗?

我尝试使用 http://github.com/nsf/termbox-go 和代码:

package main

import (
    "fmt"

    "github.com/nsf/termbox-go"
)

func main() {
    fmt.Println(termbox.Size())
}

但它打印 0 0.

我也试过 http://github.com/buger/goterm 但是当我尝试 go get 时,我得到一个错误:

$ go get github.com/buger/goterm
# github.com/buger/goterm
..\..\buger\goterm\terminal.go:78: undefined: syscall.SYS_IOCTL
..\..\buger\goterm\terminal.go:82: not enough arguments in call to syscall.Syscall

关于如何获取终端宽度还有其他想法吗?

您需要在调用 termbox.Size() 之前调用 termbox.Init(),然后在完成后调用 termbox.Close()

package main

import (
    "fmt"

    "github.com/nsf/termbox-go"
)

func main() {
    if err := termbox.Init(); err != nil {
        panic(err)
    }
    w, h := termbox.Size()
    termbox.Close()
    fmt.Println(w, h)
}

您还可以使用 twin 包:

package main
import "github.com/walles/moar/twin"

func main() {
   s, e := twin.NewScreen()
   if e != nil {
      panic(e)
   }
   w, h := s.Size()
   println(w, h)
}

https://pkg.go.dev/github.com/walles/moar/twin#Screen