go基础库之编写标准输出和错误

转载自https://www.ganymedenil.com/2019/05/29/go-standard-library-by-write-standard-output-and-errors.html

每个进程都各有一个stdinstdoutstderr文件描述符。使用的标准方法是stdout作为进程输出,stderr作为进程错误输出。由于这些是文件描述符,因此写入数据的目标可以是从控制台到套接字的任何内容。本文将告诉你如何编写stdoutstderr

编写标准输出和错误

前言

每个进程都各有一个stdinstdoutstderr文件描述符。使用的标准方法是stdout作为进程输出,stderr作为进程错误输出。由于这些是文件描述符,因此写入数据的目标可以是从控制台到套接字的任何内容。本文将告诉你如何编写stdoutstderr

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
"fmt"
"io"
"os"
)

func main() {

// 只需写字符串
io.WriteString(os.Stdout,
"这是标准输出的字符串。\n")

io.WriteString(os.Stderr,
"这是标准错误输出的字符串。\n")

// Stdout/err实现了writer接口
buf := []byte{0xAF, 0xFF, 0xFE}
for i := 0; i < 200; i++ {
if _, e := os.Stdout.Write(buf); e != nil {
panic(e)
}
}

// fmt包也可以使用
fmt.Fprintln(os.Stdout, "\n")
}
$ go run main.go
这是标准错误输出的字符串。
这是标准输出的字符串。

shell脚本

1
2
go build -o demo ./
nohup ./demo 1>result.log 2>error.log &

原理

与前文中的Stdin一样,StdoutStderr是文件描述符。这些实现了Writer接口。

上面的示例展示了几种方法展示了如何通过io.WriteString函数写入这些内容,分别是使用Writer API以及fmt包和FprintXX函数。