Как встроить структуру другого пакета в 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 - это отличная отправная точка для более глубокого изучения некоторых основных тем.