Метод reflect.Value.Convert
Метод reflect.Value.Convert преобразует значение, хранящееся
в reflect.Value, к типу, переданному в качестве аргумента.
Метод возвращает новое значение reflect.Value, представляющее
результат преобразования. В первый параметр метод принимает
значение типа reflect.Type, к которому необходимо
выполнить преобразование.
Важно отметить, что преобразование возможно только в том
случае, если исходный тип может быть преобразован к целевому
типу согласно правилам Go. Проверить возможность преобразования
можно с помощью метода reflect.Type.ConvertibleTo.
Если преобразование невозможно, метод вызовет панику.
Синтаксис
value.Convert(targetType)
Пример
Давайте преобразуем целочисленное значение к типу
float64:
package main
import (
"fmt"
"reflect"
)
func main() {
x := 42
v := reflect.ValueOf(x)
targetType := reflect.TypeOf(float64(0))
converted := v.Convert(targetType)
fmt.Println(converted.Interface())
}
Результат выполнения кода:
42
Пример
Давайте преобразуем строковое значение к типу
[]byte:
package main
import (
"fmt"
"reflect"
)
func main() {
s := "abcde"
v := reflect.ValueOf(s)
targetType := reflect.TypeOf([]byte{})
converted := v.Convert(targetType)
fmt.Println(converted.Interface())
}
Результат выполнения кода:
[97 98 99 100 101]
Пример
Давайте проверим возможность преобразования перед его выполнением:
package main
import (
"fmt"
"reflect"
)
func main() {
x := 12345
v := reflect.ValueOf(x)
targetType := reflect.TypeOf("")
if v.Type().ConvertibleTo(targetType) {
converted := v.Convert(targetType)
fmt.Println(converted.Interface())
} else {
fmt.Println("Conversion is not possible")
}
}
Результат выполнения кода:
"Conversion is not possible"
Пример
Давайте преобразуем значение интерфейса к конкретному типу:
package main
import (
"fmt"
"reflect"
)
func main() {
var i interface{} = 3.14
v := reflect.ValueOf(i)
targetType := reflect.TypeOf(int(0))
converted := v.Convert(targetType)
fmt.Println(converted.Interface())
}
Результат выполнения кода:
3
Смотрите также
-
метод
reflect.Type.ConvertibleTo,
который проверяет возможность преобразования между типами -
функцию
reflect.ValueOf,
которая создает отражаемое значение из интерфейса -
метод
reflect.Value.Interface,
который извлекает исходное значение из отражаемого -
функцию
reflect.TypeOf,
которая возвращает динамический тип интерфейса