登录
首页 >  Golang >  Go问答

字段名称 id 保留

来源:stackoverflow

时间:2024-02-24 14:54:27 150浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《字段名称 id 保留》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我正在编写一个 terraform 提供程序来与 api 交互,这是我拥有的资源架构:

&schema.resource{
        create: resourceprojectcreate,
        read:   resourceprojectread,
        update: resourceprojectupdate,
        delete: resourceprojectdelete,
        importer: &schema.resourceimporter{
            state: schema.importstatepassthrough,
        },

        customizediff: customdiff.sequence(
            customdiff.computedif("slug", func(d *schema.resourcediff, meta interface{}) bool {
                return d.haschange("name")
            }),
        ),

        schema: map[string]*schema.schema{
            "name": {
                type:     schema.typestring,
                required: true,
                validatefunc: validatename,
            },
            "description": {
                type:     schema.typestring,
                optional: true,
            },
            "issuemanagementenabled": {
                type:     schema.typebool,
                required: true,
            },
            "forkedfromid": {
                type:     schema.typeint,
                required: false,
            },
        },
    }

go install 没有编译或安装错误,并且我正在本地尝试此操作,因此我将 .terraformrc 设置为指向我的 go bin 文件夹。

terraform 似乎在某处找到了一个 id,并抱怨:

Error: Internal validation of the provider failed! This is always a bug
with the provider itself, and not a user issue. Please report
this bug:

1 error occurred:
    * resource onedev_project: id is a reserved field name

代码位于 https://github.com/ubiquitousbear/terraform-provider-onedev。有谁知道我应该在哪里删除对 id 的引用?它不在资源架构中。


正确答案


您的 go.mod 文件表明您使用的是 sdk 版本 1.17.2,其中 id is indeed recorded as a reserved attribute name

但是,it no longer seems to be present in the latest SDK release, 2.6.1。似乎该政策由于issue #607而发生了变化,并且该变化在sdk版本v2.1.0中首次发布。

虽然我无法解释为什么您共享的代码会引发该错误,但您也许可以通过升级到最新的 sdk 版本来避免该问题。由于它是一个新的主要版本,因此 api 中的其他地方可能需要考虑一些重大更改。 a Terraform SDK v2 upgrade guide 描述了这些更改,还包含指向 the tf-sdk-migrator tool 的链接,该链接具有一些自动化功能来帮助升级。

此问题有一种解决方法,无需升级到 sdk v2,您可以尝试提供其他名称,例如“id1”而不是“id”在您的架构上,例如

"id1": {
                type:        schema.typeint,
                optional:    true,
                description: "",
            },

并将该属性的值解析为您的结构

c.ID = d.Get("id1").(int)

并尝试构建。

现在唯一的缺点是您需要在 hcl 文件中提及“id1”而不是“id”。

这对我有用,但仍然升级到 sdkv2 是更好的解决方案

以上就是《字段名称 id 保留》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>