Error handling 如何在不使用日志的情况下在Go中打印到Stderr
如何在不使用Error handling 如何在不使用日志的情况下在Go中打印到Stderr,error-handling,go,Error Handling,Go,如何在不使用log的情况下将消息写入Stderr 演示如何使用log:log.Println(“消息”),但是如果我不需要时间戳怎么办 以下是好消息吗 os.Stderr.WriteString("Message") os.Stderr.WriteString(“Message”)如果不需要时间戳,只需创建一个新的标志,将设置为0: l := log.New(os.Stderr, "", 0) l.Println("log msg") 编辑: 以下是好消息吗 os.Stderr.WriteS
log
的情况下将消息写入Stderr
演示如何使用log
:log.Println(“消息”)
,但是如果我不需要时间戳怎么办
以下是好消息吗
os.Stderr.WriteString("Message")
os.Stderr.WriteString(“Message”)
如果不需要时间戳,只需创建一个新的标志,将设置为0
:
l := log.New(os.Stderr, "", 0)
l.Println("log msg")
编辑:
以下是好消息吗
os.Stderr.WriteString("Message")
这是可以接受的,您还可以使用和friends获得格式化输出:
fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)
使用fmt
软件包,您可以通过以下方式选择写入stderr
:
import "fmt"
import "os"
func main() {
fmt.Fprintln(os.Stderr, "hello world")
}
是,因此您可以在任何接受io.Writer
的函数中使用它。以下是几个例子:
str := "Message"
fmt.Fprintln(os.Stderr, str)
io.WriteString(os.Stderr, str)
io.Copy(os.Stderr, bytes.NewBufferString(str))
os.Stderr.Write([]byte(str))
这完全取决于您想要打印的字符串的精确程度(即,如果您想先格式化它,如果您将它作为一个,如果您将它作为一个字节片…)。还有很多方法。默认情况下,记录器标志设置为Ldate | Ltime
。您可以将记录器格式更改为以下任意格式(从):
当标志Ldate | Ltime | Lmicroseconds | Llongfile生成时
2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
您还可以通过将标志设置为0,将默认记录器设置为不打印任何内容:
log.SetFlags(0)
使用SetOutput函数,将输出流设置为os.Stdout
import (
"log"
"os"
)
func init() {
log.SetOutput(os.Stdout)
}
func main() {
log.Println("Gene Story SNP File Storage Server Started.")
}
Go内置函数print
和println
打印到stderr。因此,如果您只是想向stderr输出一些文本,您可以这样做
package main
func main() {
println("Hello stderr!")
}
文档:如果要使用stderr实际记录事情,请使用记录器。否则,一个简单的os.Stderr.WriteString
就足够了,这是最好的答案。尽管如此,我个人的偏好是使用fmt.Fprintf或fmt.Fprintln。如果你在你的程序中做了这么多的事情,也许可以把它包装成一个函数,然后你就可以很容易地把stderr改成stdout或者任何你想要的编写器。好提示!然而,它说:“打印对于引导和调试是有用的;它不能保证保留在语言中。”因此,对于长期项目可能不是这样?IMO,Print
和println
用于调试。实际上,文档中说,println
打印到STDERR。不过,默认情况下,它似乎不会打印到STDERR。通过go run./main.go 2>/dev/null 3>/dev/null
扔掉STDERR,我仍然收到一条“Hello STDERR!”消息。这意味着它正在打印到标准输出。我认为@juliencfmt.Fprintln(os.Stderr,“Hello Stderr!”)
也应该是公认的答案。自我提醒:在结合使用| grep'DEBUG'
时要小心。不知何故,在使用2>
时,我仍然在终端上获得stderr输出。这应该是可以接受的answer@ManuManjunath我同意
package main
func main() {
println("Hello stderr!")
}