英文:
How can I clear the terminal screen in Go?
问题
在Golang中,没有标准的方法来清除终端屏幕。但你可以使用第三方库来实现这个功能。一个常用的库是github.com/inancgumus/screen
,它提供了清除终端屏幕的函数。你可以使用该库来清除屏幕,例如:
package main
import (
"fmt"
"time"
"github.com/inancgumus/screen"
)
func main() {
for i := 0; i < 10; i++ {
screen.Clear()
screen.MoveTopLeft()
fmt.Println("Clearing the screen...")
time.Sleep(time.Second)
}
}
这段代码使用了screen
库来清除终端屏幕,并在屏幕上打印一条消息。你可以根据需要自定义清除屏幕的逻辑。
英文:
Are there any standard method in Golang to clear the terminal screen when I run a GO script? or I have to use some other libraries?
答案1
得分: 74
你需要为每个不同的操作系统定义一个清屏方法,如下所示。当用户的操作系统不受支持时,它会引发错误。
package main
import (
"fmt"
"os"
"os/exec"
"runtime"
"time"
)
var clear map[string]func() //创建一个用于存储清屏函数的映射
func init() {
clear = make(map[string]func()) //初始化映射
clear["linux"] = func() {
cmd := exec.Command("clear") //Linux示例,已测试
cmd.Stdout = os.Stdout
cmd.Run()
}
clear["windows"] = func() {
cmd := exec.Command("cmd", "/c", "cls") //Windows示例,已测试
cmd.Stdout = os.Stdout
cmd.Run()
}
}
func CallClear() {
value, ok := clear[runtime.GOOS] //runtime.GOOS -> linux, windows, darwin等
if ok { //如果我们为该平台定义了清屏函数:
value() //执行清屏函数
} else { //不支持的平台
panic("您的平台不受支持!无法清除终端屏幕 :(")
}
}
func main() {
fmt.Println("我将在2秒后清屏!")
time.Sleep(2 * time.Second)
CallClear()
fmt.Println("我很孤单...")
}
(命令执行来自@merosss的回答)
英文:
Note: Running a command to clear the screen is not a secure way. Check the other answers here as well.
You have to define a clear method for every different OS, like this. When the user's os is unsupported it panics
package main
import (
"fmt"
"os"
"os/exec"
"runtime"
"time"
)
var clear map[string]func() //create a map for storing clear funcs
func init() {
clear = make(map[string]func()) //Initialize it
clear["linux"] = func() {
cmd := exec.Command("clear") //Linux example, its tested
cmd.Stdout = os.Stdout
cmd.Run()
}
clear["windows"] = func() {
cmd := exec.Command("cmd", "/c", "cls") //Windows example, its tested
cmd.Stdout = os.Stdout
cmd.Run()
}
}
func CallClear() {
value, ok := clear[runtime.GOOS] //runtime.GOOS -> linux, windows, darwin etc.
if ok { //if we defined a clear func for that platform:
value() //we execute it
} else { //unsupported platform
panic("Your platform is unsupported! I can't clear terminal screen :(")
}
}
func main() {
fmt.Println("I will clean the screen in 2 seconds!")
time.Sleep(2 * time.Second)
CallClear()
fmt.Println("I'm alone...")
}
(the command execution is from @merosss' answer)
答案2
得分: 67
你可以使用ANSI转义码来实现:
fmt.Print("3[H3[2J")
但是你应该知道,没有一个完全可靠的跨平台解决方案来完成这个任务。你应该检查平台(Windows / UNIX)并使用cls
/ clear
或转义码。
英文:
You could do it with ANSI escape codes:
fmt.Print("3[H3[2J")
But you should know that there is no bulletproof cross-platform solution for such task. You should check platform (Windows / UNIX) and use cls
/ clear
or escape codes.
答案3
得分: 17
不要使用命令执行来完成这个任务。这样做过于复杂,不能保证可行,并且不安全。
我创建了一个小型的跨平台包,因此它可以在Windows、Linux、OS X等系统上运行。
按照以下方式安装它:
go get github.com/inancgumus/screen
然后你可以像这样使用它:
package main
import (
"fmt"
"time"
"github.com/inancgumus/screen"
)
func main() {
// 清屏
screen.Clear()
for {
// 将光标移动到屏幕左上角
screen.MoveTopLeft()
fmt.Println(time.Now())
time.Sleep(time.Second)
}
}
英文:
Don't use command execution for this. It's overkill, and not guaranteed to work, and it's not secure.
I created a small cross-platform package. So it works on Windows, Linux, OS X, etc.
Install it like this:
go get github.com/inancgumus/screen
Then you can use it like so:
package main
import (
"fmt"
"time"
"github.com/inancgumus/screen"
)
func main() {
// Clears the screen
screen.Clear()
for {
// Moves the cursor to the top left corner of the screen
screen.MoveTopLeft()
fmt.Println(time.Now())
time.Sleep(time.Second)
}
}
答案4
得分: 16
使用 goterm
package main
import (
tm "github.com/buger/goterm"
"time"
)
func main() {
tm.Clear() // 清除当前屏幕
for {
// 将光标移动到左上角位置,确保控制台输出每次都会被覆盖,而不是添加新的内容。
tm.MoveCursor(1, 1)
tm.Println("当前时间:", time.Now().Format(time.RFC1123))
tm.Flush() // 每次渲染结束时都要调用它
time.Sleep(time.Second)
}
}
英文:
Use goterm
package main
import (
tm "github.com/buger/goterm"
"time"
)
func main() {
tm.Clear() // Clear current screen
for {
// By moving cursor to top-left position we ensure that console output
// will be overwritten each time, instead of adding new.
tm.MoveCursor(1, 1)
tm.Println("Current Time:", time.Now().Format(time.RFC1123))
tm.Flush() // Call it every time at the end of rendering
time.Sleep(time.Second)
}
}
答案5
得分: 10
根据这里的报道,你可以使用以下三行代码来清除屏幕:
c := exec.Command("clear")
c.Stdout = os.Stdout
c.Run()
不要忘记导入"os"和"os/exec"。
英文:
As reported here you can use the following three lines to clear the screen:
c := exec.Command("clear")
c.Stdout = os.Stdout
c.Run()
Don't forget to import "os" and "os/exec".
答案6
得分: 4
以下是翻译好的内容:
仅适用于*nix系统(Linux、Unix等)的简单解决方案:
fmt.Println("3[2J")
这段代码用于清除终端屏幕。
英文:
Easy solution only for nix systems (linux, unix, etc.):
fmt.Println("3[2J")
答案7
得分: 2
这是一个简洁的方法:
package util
import (
"os"
"os/exec"
"runtime"
)
func runCmd(name string, arg ...string) {
cmd := exec.Command(name, arg...)
cmd.Stdout = os.Stdout
cmd.Run()
}
func ClearTerminal() {
switch runtime.GOOS {
case "darwin":
runCmd("clear")
case "linux":
runCmd("clear")
case "windows":
runCmd("cmd", "/c", "cls")
default:
runCmd("clear")
}
}
希望对你有帮助!
英文:
Here's a concise way of doing it:
package util
import (
"os"
"os/exec"
"runtime"
)
func runCmd(name string, arg ...string) {
cmd := exec.Command(name, arg...)
cmd.Stdout = os.Stdout
cmd.Run()
}
func ClearTerminal() {
switch runtime.GOOS {
case "darwin":
runCmd("clear")
case "linux":
runCmd("clear")
case "windows":
runCmd("cmd", "/c", "cls")
default:
runCmd("clear")
}
}
答案8
得分: 0
对于我来说(在我的手机上在termux上测试),这个代码可以工作:
os.Stdout.Write([]byte{0x1B, 0x5B, 0x33, 0x3B, 0x4A, 0x1B, 0x5B, 0x48, 0x1B, 0x5B, 0x32, 0x4A})
英文:
For me (tested on my mobile phone in termux) this works:
os.Stdout.Write([]byte{0x1B, 0x5B, 0x33, 0x3B, 0x4A, 0x1B, 0x5B, 0x48, 0x1B, 0x5B, 0x32, 0x4A})
答案9
得分: 0
以下是Windows和Linux的最短代码:
package main
import (
"github.com/MasterDimmy/go-cls"
)
func main() {
cls.CLS()
}
这段代码使用了 go-cls
包来清除终端屏幕。
英文:
Shortest code for Windows and Linux is:
package main
import (
"github.com/MasterDimmy/go-cls"
)
func main() {
cls.CLS()
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论