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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥200 基于同花顺supermind的量化策略脚本编辑
  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?