带条件语句 (if) 问题的范围

我是 Go 的新手,我正在努力寻找范围(和其他人一样)。


下面的代码生成:


./excel.go:24: err declared and not used

./excel.go:25: sheet declared and not used

为什么会发生这种情况?我已经在父作用域中声明了err和sheet,不是吗?


Excel.go:


package main


import (

    "os"

    "fmt"

    "github.com/tealeg/xlsx"

)


func main() {

    var file *xlsx.File

    var sheet *xlsx.Sheet

    var row *xlsx.Row

    var cell *xlsx.Cell

    var err error


    fileName := "MyXLSXFile.xlsx"


    if _, err := os.Stat(fileName); os.IsNotExist(err) {

        fmt.Printf("File does not exist so create one");

        file = xlsx.NewFile()

        sheet, err = file.AddSheet("Sheet1")

    } else {

        fmt.Printf("File exists so open");

        file, err := xlsx.OpenFile(fileName) // <-- line 24

        sheet := file.Sheets[0] // <-- line 25

    }


    row = sheet.AddRow()


    cell = row.AddCell()

    cell.Value = "I am a cell!"

    cell = row.AddCell()

    cell.Value = "I am another cell!"


    err = file.Save(fileName)


    if err != nil {

        fmt.Printf("help")

    }

}


小唯快跑啊
浏览 160回答 2
2回答

小怪兽爱吃肉

使用=代替:=:&nbsp;&nbsp;&nbsp;&nbsp;file,&nbsp;err&nbsp;=&nbsp;xlsx.OpenFile(fileName)&nbsp;//&nbsp;<--&nbsp;line&nbsp;24 &nbsp;&nbsp;&nbsp;&nbsp;sheet&nbsp;=&nbsp;file.Sheets[0]&nbsp;//&nbsp;<--&nbsp;line&nbsp;25Go 允许在嵌套块中重新声明具有相同名称的变量。:=声明一个新变量。在您的情况下,err和sheet都在 else 块中声明,但未在那里使用。

倚天杖

使用=纯分配。:=声明一个新变量。sheet := file.Sheets[0]在else块的范围内声明一个新变量(请参阅语言规范中的“短变量声明”一章)。该变量隐藏在外部作用域中声明的同名变量,并且不会存在于外部作用域中(请参阅文档):在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。所以第sheet25 行中的变量和第sheet12 行和第 28 行中的变量实际上是两个不同的变量(第 25 行中声明的第一个变量在赋值后从未使用过)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go