如何在golang中嵌入其他包的结构

时间:2017-08-26 16:14:03

标签: inheritance go struct embed

我知道如何在同一个包中嵌入struct中的其他结构,但是如何嵌入其他包的结构?

dog.go

package dog

import "fmt"

type Dog struct {
    Name string
}

func (this *Dog) callMyName() {
    fmt.Printf("Dog my name is %q\n", this.Name)
}

main.go

package main

import "/path/to/dog"

type BDog struct {
    dog.Dog
    name string
}

func main() {
    b := new(BDog)
    b.Name = "this is a Dog name"
    b.name = "this is a BDog name"
    b.callMyName()
}

当我运行main.go时,它告诉我一个错误:

./main.go:14: b.callMyName undefined (type *BDog has no field or method callMyName)

1 个答案:

答案 0 :(得分:1)

@simon_xia是对的,看起来你可能对Go来说是一个新手。

首先,欢迎来到社区!!

现在为了扩展他的评论...而不是为成员/方法提供公共/私人范围,Go有Exporting的概念。因此,如果您想允许从另一个包访问方法,只需将方法的签名大写:)

OOP的大多数基本功能在某种程度上都得到了Go的满意,但了解Go is not an object-oriented language非常重要。

我强烈建议按照整个Tour of Go的方式工作,因为它符合导出这个概念以及Go语言的许多其他关键功能。整个旅程可以在一个下午结束,并且确实很多让我在几年前掌握语言的速度。

如果你在此之后仍然渴望更多,我发现Go By Example是一个很好的参考点,可以对一些主要话题进行更深入的研究。