Это очень похоже на вопрос, на который я только что ответил: https://stackoverflow.com/a/12990540/727643
Короткий ответ: вы правы. Кусочек структур не равен фрагменту интерфейса, реализуемого структурой.
A []Person
и []Model
имеют разные макеты памяти. Это связано с тем, что типы, на которых они расположены, имеют разные макеты памяти. A Model
- значение интерфейса, что означает, что в памяти это два слова по размеру. Одно слово для информации о типе, другое для данных. A Person
- это структура, размер которой зависит от полей, которые он содержит. Чтобы преобразовать из []Person
в []Model
, вам нужно будет перебрать массив и выполнить преобразование типа для каждого элемента.
Поскольку это преобразование является операцией O (n) и приведет к созданию нового среза, Go отказывается делать это неявно. Вы можете сделать это явно со следующим кодом.
models := make([]Model, len(persons))
for i, v := range persons {
models[i] = Model(v)
}
return models
И, как указал dskinner , вы, скорее всего, хотите фрагмент указателей, а не указатель на фрагмент. Указатель на срез обычно не нужен.
*[]Person // pointer to slice
[]*Person // slice of pointers
В Сети, похоже, есть XHTML 5 XSD. Например, была схема XHTML 5 с открытым исходным кодом в: http://www.xmlmind.com/xmleditor/download.shtml
Из раздела 8.2 спецификации html5
http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html
Хотя синтаксис HTML, описанный в этой спецификации, имеет близкое сходство с SGML и XML, это отдельный язык с его собственными правилами синтаксического анализа.
Некоторые более ранние версии HTML (в частности от HTML2 до HTML4) были основаны на SGML и использовали правила синтаксического анализа SGML. Однако мало (если они есть) веб-браузеры когда-либо реализовывали корректный синтаксический анализ SGML для HTML-документов; единственные пользовательские агенты, которые строго обрабатывают HTML как приложение SGML, исторически были валидаторами. В результате путаница - с валидаторами, утверждающими, что документы имеют одно представление, в то время как широко развернутые веб-браузеры функционально реализовали другое представление, потратили десятилетия на производительность. Эта версия HTML, таким образом, возвращается к не-SGML основе.
Авторы, заинтересованные в использовании инструментов SGML в своем конвейерном конвейере, могут использовать XML-инструменты и сериализацию XML в формате HTML.
blockquote >Таким образом, если вы не пишете xml, образованный html5, вы не можете использовать XSD для проверки html5.