могу ли я очистить значения экземпляра структуры типа в golang динамически?
можно ли с помощью golang сделать метод, который динамически очищает значения экземпляра структуры? кстати, я новичок в golang.
type A struct {
Name string
Level int
}
type B struct {
Skill string
}
func main() {
a := A{"Momo", 1}
b := B{"Starfall"}
// outputs
// {"Momo", 1}
// {"Starfall"}
clear(a)
clear(b)
// outputs
// { , 0}
// { }
}
func clear(v interface{}) {
// some code
}
2 ответов
вы не можете изменить исходные значения без передачи указателя на них.
гораздо проще и понятнее просто назначить новое нулевое значение в вашем коде. Если ваши типы более сложны, вы можете заменить значения конструктором или предоставить Reset()
методы для ваших типов с приемником указателя.
Если вы действительно хотите увидеть, как это сделать через отражение, ваш clear
функция смогла выглядеть как: http://play.golang.org/p/g0zIzQA06b
func clear(v interface{}) {
p := reflect.ValueOf(v).Elem()
p.Set(reflect.Zero(p.Type()))
}
(это будет паниковать, если вы передадите значение без указателя)
можно переназначить значение пустым объектом структуры, который сбросит значения.
a := A{"Momo", 1}
b := B{"Starfall"}
fmt.Println(a)
fmt.Println(b)
// outputs
// {"Momo", 1}
// {"Starfall"}
a = A{}
b = B{}
// outputs
// { , 0}
// { }