2014-10-11 2 views
0

Как определить тип поля struct как struct?Go - как определить тип данных типа struct как другую структуру

Я хочу, чтобы иметь возможность что-то, как показано ниже:

type HelloResp struct { 
    Response struct `xml:resp` 
} 

func (hr *HelloResp) SetHelloResp(interf interface{}) { 
    hr.Response = interf 
} 

В принципе у меня есть несколько других детей я хочу Структуры встраивать в случае необходимости под HelloResp.Response поэтому они являются взаимозаменяемыми функциями.

Возможно ли это в любом случае или есть рекомендуемые способы?

ответ

0

Если вы используете тег innerxml, вы можете отложить обработку до тех пор, пока не узнаете, что находится внутри вашей структуры. Для этого вам, скорее всего, понадобится HTTP-заголовок или поле, которое даст тип. Затем вы отключаете содержимое ответа на основе этого типа.

type HelloResp struct { 
    ResponseType string `xml:responseType` 
    Response []byte `xml:response,innerxml` 
} 

Если структура имеет поле типа [] байт или строку с тегом «» InnerXml, распаковать накапливает сырой XML, вложенный внутри элемента в этой области. Остальные правила по-прежнему применяются.

Другим (менее желательным) вариантом было бы перечисление всех возможных типов в качестве указателей. Unmarshaller будет заполнять найденные им. Вам нужно будет выяснить, какой из них настроен, так что тип ответа будет нужен в любом случае.

+0

Я бы не хотел использовать unmarshall, поскольку он использует отражение, и это не хорошо для производительности. Мне пришлось бы попробовать с указателями и динамически указывать на уровне структуры –

+0

Вы уже используете unmarshall. Первый подход просто задерживает обработку встроенной структуры. –

+0

Профилируйте свою заявку? Разминирует узкое место? – RickyA

Смежные вопросы