我是 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 允许在嵌套块中重新声明具有相同名称的变量。:=
声明一个新变量。在您的情况下,err
和sheet
都在 else 块中声明,但未在那里使用。
倚天杖
TA贡献1828条经验 获得超3个赞
使用=
纯分配。:=
声明一个新变量。
sheet := file.Sheets[0]
在else
块的范围内声明一个新变量(请参阅语言规范中的“短变量声明”一章)。该变量隐藏在外部作用域中声明的同名变量,并且不会存在于外部作用域中(请参阅文档):
在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。
所以第sheet
25 行中的变量和第sheet
12 行和第 28 行中的变量实际上是两个不同的变量(第 25 行中声明的第一个变量在赋值后从未使用过)。
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报
0/150
提交
取消