Подтвердить что ты не робот

Как я могу печатать на Stderr в Go без использования журнала

Как написать сообщение Stderr без использования log?

Комментарий в этом сообщении SO показывает, как это сделать с помощью log: log.Println("Message"), но что, если мне не нужна метка времени?

Является ли следующий хороший Go?

os.Stderr.WriteString("Message")

4b9b3361

Ответ 1

Если вы не хотите отметки времени, просто создайте новый log.Logger с flag, установленным на 0:

l := log.New(os.Stderr, "", 0)
l.Println("log msg")

EDIT:

Является ли следующий хороший Go?

os.Stderr.WriteString("Message")

Это приемлемо, и вы также можете использовать fmt.Fprintf и друзей для получения отформатированного вывода:

fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)

Ответ 2

Используя пакет fmt, вы можете выбрать stderr следующим образом:

import "fmt"
import "os"

func main() {
    fmt.Fprintln(os.Stderr, "hello world")
}

Ответ 3

os.Stderr является io.Writer, поэтому вы можете использовать его в любой функции, которая принимает 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))

Все зависит от того, как именно у вас есть строка, которую вы хотите распечатать (т.е. если вы хотите отформатировать ее в первую очередь, если у вас она есть как io.Reader, если у вас это как байтовый срез...). И может быть намного больше способов.

Ответ 4

По умолчанию флаги журнала устанавливаются на Ldate | Ltime. Вы можете изменить формат регистратора на любое из следующих (из документации журнала golang):

Ldate         = 1 << iota     // the date in the local time zone: 2009/01/23
Ltime                         // the time in the local time zone: 01:23:23
Lmicroseconds                 // microsecond resolution: 01:23:23.123123.  assumes Ltime.
Llongfile                     // full file name and line number: /a/b/c/d.go:23
Lshortfile                    // final file name element and line number: d.go:23. overrides Llongfile
LUTC                          // if Ldate or Ltime is set, use UTC rather than the local time zone
LstdFlags     = Ldate | Ltime // initial values for the standard logger

Например, флаги Ldate | Ltime (или LstdFlags) производят

2009/01/23 01:23:23 message

В то время как флаги Ldate | Бюджет | Lmicroseconds | Llongfile производит,

2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message

Вы также можете установить регистратор по умолчанию, чтобы ничего не печатать, установив флаг в 0:

log.SetFlags(0)