我正在尝试读取 CSV 文件以将值存储在变量中。但是,我无法访问 for 循环之外的变量
func GetKeys(filename string) {
var record []string
var err error
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Create a new reader.
reader := csv.NewReader(bufio.NewReader(file))
for {
record, err = reader.Read()
// Stop at EOF.
if err == io.EOF {
break
}
fmt.Printf("%v", record) // works fine
fmt.Printf("%v\n", record[0]) // works fine too
}
fmt.Printf("%v\n", record) // returns empty slice
}
func main() {
GetKeys("credentials.csv")
}
最佳答案
当 reader.Read()
返回 io.EOF
时,您的循环中断。当您的输入被消耗时,就会发生这种情况。
同时(返回io.EOF
时),返回的记录将为nil
。 Reader.Read()
:
If there is no data left to be read, Read returns nil, io.EOF.
因此,您将 nil
赋值给 record
变量,循环中断,然后您检查 record
变量。
如果您打算保留最后一条记录,请将其存储在一个单独的变量中,并且不要用最后一条 nil
记录“覆盖”它:
var lastRecord []string
for {
record, err = reader.Read()
// Stop at EOF.
if err == io.EOF {
break
}
lastRecord = record
fmt.Printf("%v", record) // works fine
fmt.Printf("%v\n", record[0]) // works fine too
}
fmt.Printf("%v\n", lastRecord) // this will be the last non-nil record
关于csv - 在 Golang 中访问 for 循环之外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56653062/