Как встроить структуру другого пакета в golang

Я знаю, как встроить другую структуру в структуру в том же пакете, но как встроить структуру другого пакета?

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 ответ

Решение

@simon_xia прав, и, похоже, вы немного новичок в Go.

Прежде всего, добро пожаловать в сообщество!

Теперь, чтобы немного расширить его комментарий... вместо предоставления публичной / частной области видимости для члена / метода, Go имеет концепцию экспорта. Так что если вы хотите разрешить доступ к методу из другого пакета, просто используйте заглавную букву метода:)

Большинство основных функций ООП каким-то образом удовлетворяются Go, но важно понимать, что Go не является объектно-ориентированным языком.

Я настоятельно рекомендую пройтись по всему маршруту " Тур по Го", так как он затрагивает концепцию экспорта, а также многие другие ключевые функции языка Go. Весь тур может быть закончен во второй половине дня, и несколько лет назад он помог мне быстро освоить язык.

Если после этого вы все еще жаждете большего, я обнаружил, что Go By Example - это отличная отправная точка для более глубокого изучения некоторых основных тем.

Другие вопросы по тегам