首页 > 解决方案 > Go 是否支持嵌套类型声明或对匿名结构的文字赋值?

问题描述

我是 Go 新手,有两个关于类型的问题。

例如,使用以下代码:

type Rule struct {
    handler func() (err error)
    creator string
    args struct {
        extension string
        action string
        folder struct {
            location string
            storage string
        }
    }
}

1)如何Rule使用单个文字声明创建一个新的并将值分配给的属性args?这段代码有什么问题:

rule := Rule{
    args: {
        extension: "png,jpg,gif,svg",
        action: "move",
    },
}

2) 是否可以在类型中定义类型?例如,在不将代码分解为两个单独的类型声明的情况下,我是否可以修改该类型的args一部分以Rule定义第二种类型,称为RuleArgs?

我知道我可以将它们分解为多个赋值和声明,但我的问题是我必须这样做吗(即 Go 是否不可能不这样做)?

标签: gostructtypesliterals

解决方案


嵌套结构是一件好事,但它们可能会导致一些混乱。要实例化给定的对象,试试这个:

type Rule struct {
    handler func() (err error)
    creator string
    args struct {
        extension string
        action string
    }
}

rule := Rule{
    args: struct {
        extension string
        action    string
    }{
        extension: "png,jpg,gif,svg",
        action:    "move",
    },
}

请注意,我列出了结构的参数名称和类型。另请注意,为了简洁起见,我删除了folder论点。

如果您想在多行中执行此操作:

rule2 := Rule{}
rule2.args.action = "some-action"

推荐阅读