В настоящее время я работаю с набором структур, которые определяют несколько версий документа. Большинство полей разделены между этими различными версиями, и фактические различия довольно тонки. Я пытаюсь сделать рефакторинг кода, который анализирует этот документ. Для этого было бы очень хорошо, если бы я мог обобщить некоторые атрибуты, когда мне не нужно точно знать, с каким типом я работаю, чтобы знать, что у типа будет определенное поле.
Я думал об использовании отражения, но если бы я мог избежать этого, я бы.
Допустим, у нас есть:
type v1 struct{
a int
}
и
type v2 struct{
a int
b string
}
я хотел бы сделать что-то вроде
func main(){
var v1 v1
var v2 v2
foo(v1)
foo(v2)
}
func foo (root interface{}){
root.a = x
}
это возможно? или есть другой способ?
редактировать:
1 - это не дубликат «Получить все поля из интерфейса», так как моя проблема не в том, чтобы выяснить, с каким типом я имею дело, а в том, чтобы манипулировать / обрабатывать различные типы одинаково.
2 - это может быть дубликатом «как написать функцию для обработки двух типов входных данных в golang», но предоставленный ответ не решает мою проблему.