我正在使用 Go 中的 Cobra 框架创建一个客户端,其中包括将文件上传到即将发布的传输服务。我希望它是一个具有默认下载文件夹的最低限度可定制的。


当我想检查一个文件夹是否存在,该文件夹是一个文件夹而不是一个文件或检查我是否有权写入该文件夹时出现问题,我收到一个巨大的 goroutine 错误。


要知道:我在 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")

错误:(对不起,我无法上传图片)


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