一尘不染

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

go

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

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)

阅读 200

收藏
2020-07-02

共1个答案

一尘不染

@simon_xia是正确的,看来您 可能 对Go有点陌生。

首先,欢迎来到社区!!

现在,请扩展一下他的评论…
Go并未提供成员/方法的公共/私有范围,而是具有Exporting的概念。因此,如果要允许从另一个包访问方法,只需大写该方法的签名即可:)

Go在某种程度上满足了OOP的大多数 基本
功能,但重要的是要了解Go不是一种面向对象的语言

强烈建议
您遍历整个“围棋之旅”,因为它符合“导出”的概念以及围棋语言的许多其他关键功能。整个巡演可以在一个下午完成,并做
了很多 让我加快速度在几年前的语言。

如果您之后仍然渴望更多,我发现“通过示例”是一个很棒的参考点,可以对一些主要主题进行更深入的研究。

2020-07-02