为了账号安全,请及时绑定邮箱和手机立即绑定

限制变量存储错误的范围

限制变量存储错误的范围

Go
哔哔one 2022-01-04 10:37:57
我有以下代码: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)}这有效,但对我来说看起来不太可读。
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

首先,不需要隔离变量。其次,您可以在 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)

    }

}


查看完整回答
反对 回复 2022-01-04
?
临摹微笑

TA贡献1982条经验 获得超2个赞

您可以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)

        }   

    }

}


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号