首页 > 解决方案 > 如何阻止 fmt.print() 打印到输出?

问题描述

我正在使用一个fmt.print()在代码中有一些 s 的包,我想阻止它们打印到输出。我想在不更改包内代码的情况下抑制它们,而只需在我的main.go.

是否可以强制fmt不将打印记录到输出中?

标签: go

解决方案


是的,只是转移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")
}

并看到:

如何将 os.Stdout 输出复制到字符串变量

如何为 Go(lang) 测试捕获或抑制标准输出?


推荐阅读