reflect.Value.SetFloat

Метод reflect.Value.SetFloat используется для установки нового значения числа с плавающей точкой через отражение. В первый параметр метод принимает значение типа float64, которое будет присвоено переменной. Важно учитывать, что устанавливаемое значение должно быть совместимо с типом переменной, которую мы изменяем: если переменная имеет тип float32, значение будет автоматически преобразовано, но может произойти потеря точности.

Синтаксис

goreflect.Value.SetFloat(float64)

Пример

Давайте установим новое значение для переменной типа float64 через отражение:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var x float64 = 3.14
  v := reflect.ValueOf(&x).Elem()

  if v.CanSet() {
    v.SetFloat(2.718)
  }

  fmt.Println(x)
}

Результат выполнения кода:

go2.718

Пример

Давайте установим новое значение для переменной типа float32 через отражение:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var x float32 = 1.23
  v := reflect.ValueOf(&x).Elem()

  if v.CanSet() {
    v.SetFloat(4.56)
  }

  fmt.Println(x)
}

Результат выполнения кода:

go4.56

Обработка паники

Метод reflect.Value.SetFloat вызывает панику, если значение не является числом с плавающей точкой или если оно не может быть изменено (недоступно для записи). Перед вызовом метода всегда проверяйте доступность значения через reflect.Value.CanSet.

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var x float64 = 5.67
  v := reflect.ValueOf(x)

  fmt.Println("CanSet:", v.CanSet())

  if v.CanSet() {
    v.SetFloat(8.90)
  } else {
    fmt.Println("Cannot set value")
  }
}

Результат выполнения кода:

goCanSet: false
"Cannot set value"

Смотрите также

  • метод reflect.Value.Set,
    который устанавливает значение для любого типа
  • метод reflect.Value.SetInt,
    который устанавливает целочисленное значение
  • метод reflect.Value.SetString,
    который устанавливает строковое значение
  • метод reflect.Value.SetBool,
    который устанавливает логическое значение