首页 > 解决方案 > 我可以从方法返回匿名结构吗?

问题描述

假设我有一个结构,例如:

type Tmp struct {
    Number int 
    Text   string
}

是否有可能有一个返回匿名结构的方法?就像是:

func (t Tmp) MyStruct() struct {
    return struct {
        myVal       string
    }{
        "this is my val"
    }
}

我尝试了上面的代码,但出现错误。这有可能实现任何其他方式吗?

标签: gostructreturnreturn-type

解决方案


是的,这是可能的,但是您的函数签名在语法上不正确。struct关键字,而不是类型。

它是这样有效的:

func (t Tmp) MyStruct() struct {
    myVal string
} {
    return struct {
        myVal string
    }{
        "this is my val",
    }
}

测试它:

var t Tmp
fmt.Printf("%+v", t.MyStruct())

输出将是(在Go Playground上尝试):

{myVal:this is my val}

如您所见,这不是很方便,因为您必须在返回值时重复复合文字中的结构定义。为避免这种情况,您可以使用命名结果

func (t Tmp) MyStruct() (result struct {
    myVal string
}) {
    result.myVal = "this is my val"
    return
}

这输出相同。在Go Playground上试试这个。

但最简单的是定义一个你想要返回的类型,一切都会很简单:

type MS struct {
    myVal string
}

func (t Tmp) MyStruct() MS {
    return MS{myVal: "this is my val"}
}

在Go Playground上试试这个。


推荐阅读