戈朗 fmt.打印( "33c" ) 和 fmt.打印("x1bc")未清除屏幕(ANSI转义码不起作用)如何解决?



每当我在Windows cmd上运行fmt.Print("33c")时,它都不会清除屏幕,但每当我在javascript中console.log("33c")时,它都会打印c它工作正常。

根据以下链接,这应该有效:https://en.wikipedia.org/wiki/ANSI_escape_code#Windows

https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#samples

我尝试在javascript中记录它,它工作正常,我还尝试在打印c的末尾添加一个字符并将其更改为\x1bc,这也刚刚打印:c

以下所有打印: c 在 Windows CMD 上


func main() {
  fmt.Print("33c")
  fmt.Print("33cn")
  fmt.Print("x1bc")
  fmt.Print("x1bcn")
  fmt.Println("33c")
  fmt.Println("x1bc")
}

我预计它只会像在javascript中一样清除屏幕,但由于某种原因它没有

澄清一下,我说的是ANSI转义代码不起作用。

问题是窗口需要 ENABLE_VIRTUAL_TERMINAL_PROCESSING(0x0004( 控制台标志 我使用以下代码将标志添加到控制台来修复它:

package main
// #include "Windows.h"
import "C"
import "fmt"
func main() {
    // Needed for getting handle and getting current console mode
    var mode C.DWORD
    handle := C.GetStdHandle(C.STD_OUTPUT_HANDLE)
    C.GetConsoleMode(handle, &mode)
    // Enable Virtual Terminal Processing by adding the flag to the current mode
    C.SetConsoleMode(handle, mode|0x0004)
    fmt.Print("33c")
}

设置控制台模式

===编辑===

就像评论中提到的 Matmarbon // #include "Windows.h"行是必要的,您需要安装gcc

最新更新