Golang 中国

代码片段

红框处的代码作何理解?书中这一串代码看不懂,为何不去除红框处的代码,直接执行红色圆圈处代码有何不妥?
fileType为string类型,fileVersion为一个int类型

3 回复
jimmykuu
#1 jimmykuu • 2018-06-07 22:32

传进来的需要解析的内容有可能是 stringint[]*Invoice 三种类型之一。

依次解析这三种类型,如果先解析成功就返回。

junzizhiyao
#2 junzizhiyao • 2018-06-08 15:28

可是我看书上的例子最终是解析成[]*Invoice,前面解析stirng和int来作为一个json字符串的对象,肯定解析失败了吧?

rockman
#3 rockman • 2018-06-29 14:49

可以看下Encode的文档:

Encode writes the JSON encoding of v to the stream, followed by a newline character.

把v对应的JSON Encoding写入到Writer对应的stream中,然后换一行。

你的例子调用了3次Encode(),所以写入3个JSON Encoding,然后有3行。

测试例子:

package main

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

type Invoice struct {
    Title string `json:"title"`
}

func main() {
    fileType := "json"
    fileVersion := 1
    invoices := []*Invoice{
        &Invoice{
            Title: "Invoice 1",
        },
        &Invoice{
            Title: "Invoice 2",
        },
    }

    encoder := json.NewEncoder(os.Stdout)
    encoder.Encode(fileType)
    encoder.Encode(fileVersion)
    encoder.Encode(invoices)

    // Output:
    //"json"
    //1
    //[{"title":"Invoice 1"},{"title":"Invoice 2"}]
}
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。