Передача структуры с анонимным полем в Go

Иди сюда новичок. У меня есть две структуры, Parent и Child. Child содержит Parent как анонимное поле. Я хочу знать, как я могу передать эту структуру функции, которая ожидает Parent (и ничего не знает о Child). Вот код, иллюстрирующий то, что я хочу сделать:

package main

import "fmt"

type Parent struct {
    Dad string
}

type Child struct {
    Parent
    Son string
}

func myfunc(data Parent) {
    fmt.Printf("Dad is %s\n", data.Dad)
}

func main() {
    var data Child
    data.Dad = "pappy"
    data.Son = "sonny"
    myfunc(data)
}

Что за волшебное объявление myfunc(), чтобы заставить это работать?


person Mark Fletcher    schedule 07.02.2014    source источник


Ответы (1)


Ваш код работает на игровой площадке Go, если вы просто измените предпоследнюю строку на:

myfunc(data.Parent)

Вы не должны ожидать, что сможете заставить его работать, просто изменив myfunc, поскольку вы сказали, что myfunc не может ничего знать о классе Child.

person David Grayson    schedule 07.02.2014
comment
Отлично, спасибо. Я не мог найти ничего, говорящего об этом в документах или где-либо еще. - person Mark Fletcher; 08.02.2014
comment
Тип объекта, который вы передаете в качестве аргумента функции, просто соответствует типу ожидаемого объекта. Если он ожидает Parent, а вы передаете Child, большинство строго типизированных языков не имеют возможности справиться с этим, и вы не должны ожидать, что это сработает. Итак, возникает вопрос, как мне получить родителя из ребенка, и мне потребовалось всего одно предположение, чтобы понять это. - person David Grayson; 08.02.2014