Передать структуру функции в качестве параметра и вернуть фрагмент соответствующей структуры - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь написать функцию, которая может использоваться различными структурами. Возвращаемая функция должна быть частью соответствующей структуры. Таким образом, мне нужна функция, которая принимает структуру в качестве параметра и возвращает срез. Мой код как-то выглядит так, но я понятия не имею, как мне обернуть его как функцию?

type name struct{
   FirstName string `xml:"firstName"`
   LastName string `xml:"lastName"`
  }

fileList := TreeTraversal(".")
    var a name
    var b []name 


for i := 0; i < len(fileList); i++{
    fileByte, _ := ioutil.ReadFile(fileList[i])

    xml.Unmarshal(fileByte, &a)
    b = append(b, a)
}

Насколько я знаю, я могу передать структуру функции в качестве интерфейса, но я понятия не имею о типе возвращаемого значения?

1 Ответ

0 голосов
/ 23 января 2019

Если вам нужна функция, которая принимает любой тип структуры и возвращает его фрагмент, например:

func MakeSlice(s ANY_STRUCT_TYPE) []ANY_STRUCT_TYPE

Вы ищете дженерики, которые Go в настоящее время не поддерживает. См. эту запись FAQ .

Команда Go работает над добавлением обобщений к языку - это незавершенная работа, и каждый волен участвовать в обсуждении. Как только дженерики существуют, они обеспечат решение, которое вы ищете здесь.


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

...