-2

客观的

向 dropbox 的 CLI 工具添加一个命令,以获取给定路径(文件或文件夹)的共享链接。

更改在这里:github fork

背景

dropbox-go-sdk 有一个函数,它接受一个路径,并返回一个新的共享链接,或者返回一个包含现有共享链接的错误。

我不知道如何使用错误来提取现有的共享链接。

代码

在 github 上,并在此处摘录:

    dbx := sharing.New(config)
    res, err := dbx.CreateSharedLinkWithSettings(arg)
    if err != nil {
        switch e := err.(type) {
        case sharing.CreateSharedLinkWithSettingsAPIError:
            fmt.Printf("%v", e.EndpointError)
        default:
            return err
        }
    }

这将打印以下内容:

&{{shared_link_already_exists} <nil> <nil>}found unknown shared link typeError: shared_link_already_exists/...

跟踪: CreateSharedLinkWithSettings --> CreateSharedLinkWithSettingsAPIError --> CreateSharedLinkWithSettingsError --> SharedLinkAlreadyExistsMetadata --> IsSharedLinkMetadata

IsSharedLinkMetadata包含我正在寻找的 URL。

更多信息

我很难理解如何处理错误并从中提取 url。

  • dbxcli 有一些代码执行类似的操作,但同样,不确定它是如何工作的,足以将其应用于我正在处理的代码。它是一个结构吗?地图?我不知道这东西叫什么。err.(type)代码中发生了一些奇怪的魔法。我如何访问数据?
4

2 回答 2

1
dbx := sharing.New(config)
    res, err := dbx.CreateSharedLinkWithSettings(arg)
    if err != nil {
        switch e := err.(type) {
        case sharing.CreateSharedLinkWithSettingsAPIError:
            fmt.Printf("%v", e.EndpointError)
            // type cast to the specific error and access the field you want.
            settingsError := err.(sharing.CreateSharedLinkWithSettingsAPIError)
            fmt.Println(settingsError.EndpointError.SharedLinkAlreadyExists.Metadata.Url)
        default:
            return err
        }
    }
于 2020-12-11T03:34:35.217 回答
0

@jimb 在评论中回答了这个问题。答案是您可以像访问任何其他 golang 数据结构一样访问字段 - 没什么特别的。

我在尝试访问这些字段时遇到的错误是因为这些字段不存在。

代码的问题是依赖问题。代码依赖于旧版本的 go-sdk,我引用了最新版本。

这个问题很好地解释了真正的 golang 程序员如何通过示例处理代码中的错误。我无法在网上找到这个,所以我不会关闭这个问题。

于 2020-12-14T17:57:36.430 回答