使用golang中的方法进行struct转换

时间:2017-07-14 19:20:09

标签: go methods struct type-conversion

为了简化项目的导入和依赖项,我想转换一个类型结构,并且仍然可以访问它所附加的所有方法。

这就是我要找的:

type foo struct {
a int
}

func (f *foo) bar() {
    f.a = 42
}

type foo2 foo

func main() {
    f := foo{12}
    f.bar()
    f2 := foo2(f)
    f2.a = 0
    f2.bar()
    fmt.Println(f)
    fmt.Println(f2)
}

在线" f2.Bar()"我收到错误:

" f2.Bar undefined(类型Foo2没有字段或方法栏)"

即使我进行了转换,如何才能访问方法栏。我希望我的输出是

{42}
{42}

1 个答案:

答案 0 :(得分:2)

您可以使用struct embeding

package main

import (
    "fmt"
)

type foo struct {
    a int
}

func (f *foo) bar() {
    f.a = 42
}

type foo2 struct {
    foo
}

func main() {
    f := foo{12}
    f.bar()
    f2 := foo2{}
    f2.a = 0
    f2.bar()
    fmt.Println(f)
    fmt.Println(f2)
}

只需创建struct并使用foo作为其成员之一。不要给它明确的名称

type foo2 struct {
    foo
}

这样foo的所有方法都可用于foo2。

请注意,此程序的输出将为:

{42}
{{42}}

实现我想要做的更有效的方式将来自新的Go 1.9:https://tip.golang.org/doc/go1.9#language