Go 如何停止fmt.print()打印到输出?

Go 如何停止fmt.print()打印到输出?,go,Go,我正在使用一个包,它的代码中有一些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

我正在使用一个包,它的代码中有一些
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")
}

请参阅:


使用记录器而不是fmt.Print(),以便进行配置。