我可以根据条件向创建语句中的切片添加项目吗?

Can I add items to a slice in the creation statement depending on a condition?

我有创建像这样的切片的函数:

func buildOptions(cfg *ServerConfig) []SomeType {

    return []SomeType{
        Option1,
        Option2,
        Option3,
    }
}

只有在满足特定条件时,我才需要将 Option3 添加到切片中。是否可以在同一语句中使用某种立即数来完成?

我是否必须做这样的事情:

func buildOptions(cfg *ServerConfig) []SomeType {

    options:= []SomeType{
        Option1,
        Option2,
    }

    if addOption3==true{
       options = append(options, Option3)
    }
    return options
}

不,您不能有条件地包含 composite literal 中列出的元素。

使用额外的 ifappend() 可能会更冗长,但会发生什么(您的代码做了什么)更加明显。

您可以使用传递条件和所有元素的辅助函数来实现类似的目的,但这只会使代码更加混乱并且性能会更差。