go - 如何阻止 fmt.print() 打印到输出?
问题描述
我正在使用一个fmt.print()
在代码中有一些 s 的包,我想阻止它们打印到输出。我想在不更改包内代码的情况下抑制它们,而只需在我的main.go
.
是否可以强制fmt
不将打印记录到输出中?
解决方案
是的,只是转移os.Stdout
和/或os.Stderr
例如:
package main
import (
"fmt"
"os"
)
func main() {
temp := os.Stdout
os.Stdout = nil // turn it off
packageFunctions() // call you package functions here
os.Stdout = temp // restore it
fmt.Println("Bye")
}
func packageFunctions() {
fmt.Println("Hi")
}
输出:
Bye
您可以将其转移到临时文件:
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
tmpfile, err := ioutil.TempFile("", "example")
if err != nil {
log.Fatal(err)
}
fmt.Println(tmpfile.Name())
// defer os.Remove(tmpfile.Name()) // clean up
temp := os.Stdout
os.Stdout = tmpfile
packageFunctions() // call you package functions here
if err := tmpfile.Close(); err != nil {
log.Fatal(err)
}
os.Stdout = temp // restore it
fmt.Println("Bye")
}
func packageFunctions() {
fmt.Println("Hi")
}
并看到:
推荐阅读
- android - Android Studio:OneSignal 导致问题
- excel - 组合框中的索引值
- excel - 类型与变体/整数不匹配
- jenkins - 如何从 Jenkins 管道启用并发构建
- android - 当我在 Android Studio 中使用导航第二次启动操作时,为什么导航目的地会丢失?
- javascript - 向左或向右看时,如何使子弹不随角色移动?
- node.js - 使用 Nodejs 在 Mongodb 中导入文件
- reactjs - 将变量传递给 React useCallback 钩子
- angular - 无法使用 angular-6-social-login 在 ionic 中使用 google 登录
- java - 使用任何 JavaFX 指令时 Gradle 项目中的 IllegalAccessError