go - 在golang中的if条件的基础上重写一个变量类型

标签 go

我来自 python 背景和 Golang 的新手。
我开始用 Golang 写一些代码,遇到了一个基于 if 条件设置数据类型的问题。
在使用 Govmomi 模块时,我遇到了 Retrieve接受最后一个参数作为接口(interface)的方法。
在我的脚本中,我正在检查如下参数

    var hss []mo.HostSystem
    var ds []mo.Datastore

    if command == "VMFS" {
        err = v.Retrieve(ctx, []string{commandChoices[command]}, []string{"name", "summary"}, &ds)
        if err != nil {
            log.Fatal(err)
        }

        for _, host := range ds {
            fmt.Println(host.Name)
        }
    } else {
        err = v.Retrieve(ctx, []string{commandChoices[command]}, []string{"name", "summary"}, &hss)
        if err != nil {
            log.Fatal(err)
        }

        for _, host := range hss {
            fmt.Println(host.Name)
    }
更多此代码是我想避免但不确定如何根据 if 条件设置数据类型的样板代码。我正在寻找类似的东西
if command == "VMFS" {
dss = []mo.Datasore
} else {
dss = []mo.HostSystem
}
然后将 dss 作为最后一个参数传递给 Retrieve 方法。
非常感谢任何帮助。

最佳答案

声明变量dss与参数的类型。根据需要为变量赋值。

var dss interface{}
if command == "VMFS" {
    dss = &[]mo.Datastore{}
} else {
    dss = &[]mo.HostSystem{}
}
err = v.Retrieve(ctx, []string{commandChoices[command]}, []string{"name", "summary"}, dss)
if err != nil {
    log.Fatal(err)
}

关于go - 在golang中的if条件的基础上重写一个变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63851264/

相关文章:

go - 我如何编写一个函数代理,它采用一个转换为 func(...x) ...y 的接口(interface){},并将结果绑定(bind)到一个指针值?

go - 将 URL.Query( slice 映射)转换为 struct golang

go - 如果标准 golang big.Int 函数接受两个参数并返回一个值,为什么它要使用接收器?

forms - 最佳实践 : r. PostFormValue ("key") VS r.PostForm.Get ("key")

go - 巴泽尔去嵌入数据 "could not embed"

mysql - 是什么导致此代码中的 SQL 语法错误 1064?

go - 是否有一个 golang redis 客户端可以自动检测 pubsub 的新分片?

for-loop - 在第一个间隔之前优雅地运行 Ticker 的主体?

cookies - 基于 Golang session 的身份验证

go - 斐波那契负数