简体   繁体   English

无法使用 Golang 扫描文件路径

[英]Impossible to scan a filepath with Golang

I am creating a client with the Cobra framework in Go that consists of uploading a file to a transfer service that will be released very soon.我正在 Go 中使用 Cobra 框架创建一个客户端,其中包括将文件上传到即将发布的传输服务。 I want it to be a minimally customizable with a default download folder.我希望它是一个具有默认下载文件夹的最低限度可定制的。

Problem when I want to check that a folder exists, that the folder is a folder and not a file or check that I have permission to write to the folder I get a huge goroutine error.当我想检查一个文件夹是否存在,该文件夹是一个文件夹而不是一个文件或检查我是否有权写入该文件夹时出现问题,我收到一个巨大的 goroutine 错误。

To know: I use drag and drop in macOS要知道:我在 macOS 中使用拖放

var dldpath string
inquire.Query().Input(&dldpath, "Chemin du dossier de téléchargement ", nil).Exec()

println("le chemin est : ", dldpath)

if len(dldpath) == 0 {
    fmt.Println(chalk.Red, "Erreur : Vous devez spécifier un dossier à téléverser")
    os.Exit(0)
}
dir, err := os.Stat(dldpath)

if !dir.IsDir() {
    fmt.Println(chalk.Red, "Erreur : Le chemin spécifié n'est pas un dossier")
    os.Exit(0)
}

if errors.Is(err, os.ErrNotExist) {
    fmt.Println(chalk.Red, "Erreur : Dossier introuvable")
    os.Exit(0)
}


screen.Clear()
screen.MoveTopLeft()
fmt.Println(chalk.Green, "Dossier de téléchargement par défaut changé avec succès")

Error: (sorry I can't upload images)错误:(对不起,我无法上传图片)

le chemin est :  '/Users/eliezayat/Downloads/bassine wavy.png'
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x119b260]

goroutine 1 [running]:
freetranscli/cmd.glob..func3(0x1370900?, {0x11ef012?, 0x0?, 0x0?})
        /Users/eliezayat/Documents/freetranscli/cmd/set.go:44 +0x280
github.com/spf13/cobra.(*Command).execute(0x1370900, {0x13a3d80, 0x0, 0x0})
        /Users/eliezayat/go/pkg/mod/github.com/spf13/cobra@v1.6.1/command.go:920 +0x847
github.com/spf13/cobra.(*Command).ExecuteC(0x1370620)
        /Users/eliezayat/go/pkg/mod/github.com/spf13/cobra@v1.6.1/command.go:1044 +0x3bd
github.com/spf13/cobra.(*Command).Execute(...)
        /Users/eliezayat/go/pkg/mod/github.com/spf13/cobra@v1.6.1/command.go:968
freetranscli/cmd.Execute()
        /Users/eliezayat/Documents/freetranscli/cmd/root.go:28 +0x25
main.main()
        /Users/eliezayat/Documents/freetranscli/main.go:8 +0x17
exit status 2

In case if dir variable is nil you'll receive nil pointer dereference .如果dir变量为nil ,您将收到nil pointer dereference

It's better to check for any error ( errors.Is ) before check for dir( dir.IsDir() ):最好在检查 dir( dir.IsDir() ) 之前检查是否有任何错误 ( errors.Is ):

dir, err := os.Stat(dldpath)
if errors.Is(err, os.ErrNotExist) {
    fmt.Println(chalk.Red, "Erreur : Dossier introuvable")
    os.Exit(0)
}
if !dir.IsDir() {
    fmt.Println(chalk.Red, "Erreur : Le chemin spécifié n'est pas un dossier")
    os.Exit(0)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM