Тип reflect.ValueError
Тип reflect.ValueError представляет ошибку,
возникающую при выполнении некорректных операций
с отражением в пакете reflect. Эта ошибка
возвращается при попытке выполнить неподдерживаемую
операцию над значением, например, вызвать метод
SetInt на значении типа string.
Структура содержит метод Error, который
возвращает строковое описание ошибки.
Синтаксис
type ValueError struct {
Method string
Kind Kind
}
Пример возникновения ошибки
Попробуем установить целочисленное значение для переменной строкового типа:
package main
import (
"fmt"
"reflect"
)
func main() {
var str string = "abcde"
val := reflect.ValueOf(&str).Elem()
val.SetInt(12345)
}
Результат выполнения кода:
"panic: reflect: call of reflect.Value.SetInt on string Value"
Пример обработки ошибки
Используем метод CanSet и проверку типа
перед установкой значения:
package main
import (
"fmt"
"reflect"
)
func main() {
var num int = 42
val := reflect.ValueOf(&num).Elem()
if val.CanSet() && val.Kind() == reflect.Int {
val.SetInt(100)
fmt.Println("num =", num)
} else {
fmt.Println("Cannot set value")
}
}
Результат выполнения кода:
"num = 100"
Пример сравнения типов
Проверяем соответствие типа перед операцией с отражением:
package main
import (
"fmt"
"reflect"
)
func main() {
var data string = "abcde"
val := reflect.ValueOf(data)
if val.Kind() == reflect.String {
fmt.Println("Value is string:", val.String())
} else {
fmt.Println("Value is not string")
}
}
Результат выполнения кода:
"Value is string: abcde"
Смотрите также
-
тип
reflect.Value,
который представляет значение в системе отражения -
тип
reflect.Kind,
который представляет тип значения в отражении -
метод
reflect.Value.CanSet,
который проверяет возможность изменения значения -
метод
reflect.Value.Kind,
который возвращает вид значения в отражении