限制变量存储错误的范围

我有以下代码:


if entryJson, err := json.MarshalIndent(entry, "", " "); err != nil{

    log.Println(err)

} else {

    log.Println(entryJson)

}


if err := ioutil.WriteFile("text.json", entryJson, 0644); err != nil {

    log.Println(err)

}

我想尽可能地限制err的范围。我面临的问题是,entryJson当我想将它写入文件时,该变量超出了范围。

处理这个问题的惯用方法是什么。我应该重用变量err并在附加的if块中检查它吗?像这样:


entryJson, err := json.MarshalIndent(entry, "", " ")

if err != nil{

    log.Println(err)

} else {

    log.Println(entryJson)

}


err = ioutil.WriteFile("text.json", entryJson, 0644)

if err != nil{

    log.Println(err)

}

这有效,但对我来说看起来不太可读。


哔哔one
浏览 191回答 2
2回答

HUH函数

首先,不需要隔离变量。其次,您可以在 if 语句中进行简写赋值,例如:entryJson, err := json.MarshalIndent(entry, "", " ")if err != nil{    log.Println(err)} else {    log.Println(entryJson)}if err = ioutil.WriteFile("text.json", entryJson, 0644); err != nil{    log.Println(err)}// or if you want to limit the scope of err badly, this is also legal:if err := ioutil.WriteFile("text.json", entryJson, 0644); err != nil{    log.Println(err)}处理这个特定示例的一种干净的方法是将它放在它自己的函数中并调用它:func writeJSON(fn string, v interface{}) error {    j, err := json.MarshalIndent(v, "", " ")    if err != nil {        return err    }    return ioutil.WriteFile(fn, j, 0644)}func main() {    var test struct {        A string        B string    }    if err := writeJSON("file.json", test); err != nil {        log.Fatal(err)    }}

临摹微笑

您可以else在错误检查后的语句中写入文件,尽管我不能说它是惯用的/可读的。var entry = []byte(`{    "name": "bob",    "age" : 74}`)func main() {    if entryJson, err := json.MarshalIndent(entry, "", " "); err != nil {        log.Fatal(err)    } else {        if err = ioutil.WriteFile("text.json", entryJson, 0644); err != nil {            log.Fatal(err)        }       }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go