go - json.Encoder 中的日期输出来自哪里?

标签 go

the JSON and Go blog post结尾你会发现这个示例程序:

package main

import (
    "encoding/json"
    "log"
    "os"
)

func main() {
    dec := json.NewDecoder(os.Stdin)
    enc := json.NewEncoder(os.Stdout)
    for {
        var v map[string]interface{}
        if err := dec.Decode(&v); err != nil {
            log.Println(err)
            return
        }
        for k := range v {
            if k != "Name" {
                delete(v, k)
            }
        }
        if err := enc.Encode(&v); err != nil {
            log.Println(err)
        }
    }
}

我用 go build json_decoder.go 编译了这个,然后在 bash 中运行该程序:

echo '{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}' | json_decoder

并收到此输出:

{"Name":"Wednesday"}
2019/08/17 22:09:20 EOF

第一行输出正是我所期望的。但是 2019/08/17 22:09:20 EOF 行来自哪里?

最佳答案

当到达 EOF 时,解码器返回 io.EOF然后由记录器 log.Println(err) 输出,并添加时间戳。

例如,您可以在像这样解码时检查EOF

if err := dec.Decode(&v); err != nil {
    if err != io.EOF {
        log.Println(err)
    }
    return
}

输出:

➜ echo '{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}' | ./json_decoder
{"Name":"Wednesday"}

关于go - json.Encoder 中的日期输出来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541199/

相关文章:

windows - Golang : HTTP deployment under Windows

go - 在 cookie 名称上添加对分隔符的支持

http - 如何倒带 io.ReadCloser

nginx - 戈兰 + nginx + https

go - 打印格式的有效方法

ajax - 使用模板在 Golang 中创建加载更多按钮

go - slice 副本未按预期工作

go - 通过 vagrant GO 进行远程调试

go - 如何从另一个包正确导入方法

windows - 我可以使用 Golang 获取 Active Directory 环境的内部域名吗?