我使用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 關注
- 284 瀏覽
添加回答
舉報
0/150
提交
取消
