douyong1908 2019-06-18 16:03
浏览 915
已采纳

在Golang中访问for循环之外的变量

I'm trying to read a CSV file to store the values in a variable. However, I couldn't access the variables outside of the for loop

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
", record[0]) // works fine too
    }
    fmt.Printf("%v
", record) // returns empty slice
}

func main() {
    GetKeys("credentials.csv")
}
  • 写回答

1条回答 默认 最新

  • ds355020 2019-06-18 16:09
    关注

    Your loop breaks when reader.Read() returns io.EOF. This happens when your input is consumed.

    At the same time (when io.EOF is returned), the returned record will be nil. Reader.Read():

    If there is no data left to be read, Read returns nil, io.EOF.

    So you assign nil to the record variable, the loop breaks, and you inspect the record variable.

    If your intent is to hold the last record, store it in a separate variable, and do not "overwrite" it with the last nil record:

    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
    ", record[0]) // works fine too
    }
    fmt.Printf("%v
    ", lastRecord) // this will be the last non-nil record
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵