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

时间:2018-04-04 14:37:54

标签: 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

1 个答案:

答案 0 :(得分:4)

该问题使用Number.toString()。类型断言断言接口值是特定类型。它不会转换类型。

使用type assertion在不同类型之间进行转换:

var v1 MyType
var v2 logrus.Fields

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

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

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
}