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

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

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

Go
小唯快跑啊 2021-12-06 19:35:07
我是 Go 的新手,我正在努力寻找范围(和其他人一样)。下面的代码生成:./excel.go:24: err declared and not used./excel.go:25: sheet declared and not used为什么会发生这种情况?我已经在父作用域中声明了err和sheet,不是吗?Excel.go:package mainimport (    "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")    }}
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

使用=代替:=

    file, err = xlsx.OpenFile(fileName) // <-- line 24
    sheet = file.Sheets[0] // <-- line 25

Go 允许在嵌套块中重新声明具有相同名称的变量。:=声明一个新变量。在您的情况下,errsheet都在 else 块中声明,但未在那里使用。


查看完整回答
反对 回复 2021-12-06
?
倚天杖

TA贡献1828条经验 获得超3个赞

使用=纯分配。:=声明一个新变量。

sheet := file.Sheets[0]else块的范围内声明一个新变量(请参阅语言规范中的“短变量声明”一章)。该变量隐藏在外部作用域中声明的同名变量,并且不会存在于外部作用域中(请参阅文档):

在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。

所以第sheet25 行中的变量和第sheet12 行和第 28 行中的变量实际上是两个不同的变量(第 25 行中声明的第一个变量在赋值后从未使用过)。


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信