我使用http://github.com/dutchcoders/goftp通过 FTP 发送文件。它可以正常工作,但是当我想上传文件并获取该文件信息时(同时)它不起作用!fileName := "sth"var err errorvar ftp *goftp.FTPif ftp, err = goftp.Connect("serverip:port"); err != nil { fmt.Println(err)}defer ftp.Close()config := tls.Config{ InsecureSkipVerify: true, ClientAuth: tls.RequestClientCert,}if err = ftp.AuthTLS(config); err != nil { // log.Println("1", err)}if err = ftp.Login("userName", "pass"); err != nil { log.Println("2", err)}//if err = ftp.Cwd("/home/myDir/"); err != nil { log.Println("3", err)}var file *os.Fileif file, err = os.Open(fileName); err != nil { log.Println("6", err)}defer file.Close()fmt.Println("start")go func() { fmt.Println("first") nmp := ftp.Stor(fileName, file) if nmp != nil { log.Println("7", err) } else { fmt.Println("first is runung") }}()go func() { fmt.Println("second") for { files, nms := ftp.List(fileName) if nms == nil { fmt.Println(files) } time.Sleep(1 * time.Second) }}()fmt.Println("end")var mnmn stringfmt.Scan(&mnmn)ftp.Stor func 不会运行,我的代码返回以下输出:startendfirstsecond2016/05/31 13:21:38 7 <nil>[][]
1 回答

绝地无双
TA贡献1946条经验 获得超4个赞
目前,这两个 goroutine 都有相同的 ftp 实例(var ftp *goftp.FTP),它们相互阻塞,因为它们有竞争条件。你的结果是不可预测的。有时,它在第一次正确执行时会给出正确的结果。或者当它等待第二个然后完全运行时。或者当 first 不执行时。否则,两个 go 例程都会相互阻塞。解决方案:
您使用两个不同的 ftp 实例来为 goroutine 提供不同的连接
var ftp,ftp1 *goftp.FTP
喜欢这里玩 Golang 或
在 main go 例程中首先有 *goftp 存储。然后开始其他 goroutine。但这会破坏第二次围棋例程的目的。
- 1 回答
- 0 关注
- 244 浏览
添加回答
举报
0/150
提交
取消