go - 如何在 golang 中相互转换相同的签名类型?

标签 go

我要转换自;

type MyType map[string]interface{}

到;

logrus.Fields // map[string]interface{}

我的代码是;

func newAction(data interface{}) { // data comes as 'MyType'
    df := data.(logrus.Fields)
}

我接受了这个错误;

interface conversion: interface {} is MyType, not logrus.Fields

最佳答案

问题使用 type assertion .类型断言断言接口(interface)值是特定类型。它不转换类型。

使用 conversion在类型之间进行转换:

var v1 MyType
var v2 logrus.Fields

v2 = logrus.Fields(v1)
v1 = MyType(v2)

如果您有一个可以接受任何一种类型的函数,请使用 type switch然后转换每个特定类型:

func newAction(data interface{}) {
    var df logrus.Fields
    switch v := data.(type) {
    case logur.Fields:
        df = v
    case MyType:
        df = logrus.Fields(v)
    default:
        // handle error
    }
    ... do something with df
}

关于go - 如何在 golang 中相互转换相同的签名类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49653870/

相关文章:

go - 在 Go 中创建具有未导出子结构的结构实例

concurrency - 什么时候可以在不锁定的情况下安全地访问受互斥锁保护的变量?

go - 在 Go slice 中,为什么 s[lo :hi] end at element hi-1?

go - 如何在Golang中正确使用指针

go - 在 Go 中实现红黑树的惯用方法是什么?

git - 如何在不复制子包代码的情况下将主要版本升级到 v2,并默认获取最新版本?

web-applications - Go Webapp & Nginx : Confusion about listening, fastcgi & 反向代理

go - 如何使 `go get` 构建为针对 x86_64 而不是 i386

loops - 循环中的动态变量

gomock, Go,芒果包,MongoMock