尝试使用新函数扩展结构时出现无效类型断言错误[重复]

问题描述 投票:0回答:0

以下函数名为

GetVersion

   func (analytics Analytics) GetVersion() types.ProductVersion {
        var version types.ProductVersion
        version.Python = "9.1.2"
        version.Angular = "4.5.1"
        return version
    }

返回版本

struct
如下所示:

    package types

    type ProductVersion struct {
        Node    string
        Vue     string
        Python  string
        Angular string
    }

另一个包使用上面定义的

GetVersion
函数,调用它为:

productVersions := version.GetVersion()

现在,我想做的是,用新方法扩展相同的结构

ProductVersion
,这样我就可以在
productVersions
(从调用GetVersion返回)上调用新函数,如下所示:

productVersions.Foo()
productVersions.Bar()
productVersions.FooBar()

这是我所做的:

type New_ProductVersion types.ProductVersion

func (npv *New_ProductVersion) Foo() {

}

func (npv *New_ProductVersion) Bar() {

}

func (npv *New_ProductVersion) FooBar() {
}

但是当我执行以下操作时,

productVersions := version.GetVersion()
newPV := productVersions.(New_ProductVersion)
// newPV.Foo()
// newPV.Bar()
// newPV.FooBar()

我得到一个错误

Invalid type assertion: productVersions.(ExtendedProductVersion) (non-interface type ProductVersion on the left)

我该如何解决这个错误?

go pointers struct interface
© www.soinside.com 2019 - 2024. All rights reserved.