Problem

当我将一定数量的文件(从Linux)写入远程SFTP服务器(Linux)时,我收到错误:

panic:运行时错误:无效的内存地址或nil指针取消引用

Approach

我正在使用 github.com/pkg/sftp 将本地文件传输到远程服务器 .

func mvDirs(client *sftp.Client, dirs, files []string, remotedir string) {
    for _, d := range dirs {
        err := client.Mkdir(remotedir + d)

        if err != nil {
            log.Fatal("dirs error: ", err)
        }
    }

    for i, f := range files {
        src, err := ioutil.ReadFile(f)
        if err != nil {
            log.Fatal("src error: ", err)
        }

        dst, err := client.Create(f)
        if err != nil {
            log.Fatal("dst error: ", err)
        }

        _, err = dst.Write(src)
        if err != nil {
            log.Fatal("write error: ", err)
        }
    }
}

这适用于只包含几个文件的目录 . 但在一定数量的文件(> 1,022),我得到错误 .

Exact error log

panic:运行时错误:无效的内存地址或nil指针取消引用[signal SIGSEGV:segmentation violation code = 0x1 addr = 0x0 pc = 0x568b0a] goroutine 1 [running]:github.com/pkg/sftp . (* File).Write( 0x0,0xc0002ef800,0x5f1,0x7f1,0x64b660,0xc00014a9f0,0x38)/go/src/github.com/pkg/sftp/client.go:1044 0x3a main.mvDirs(0xc0000b2070,0xc0003e0000,0x1ab,0x200,0xc0003d2000,0x79d,0xa00 ,0x61d0c8,0x16)/go/src/project/deploy/client.go:59 0x463 main.main()/ go/src/project/deploy/main.go:20 0x1ab