Метод reflect.Value.SetString
Метод reflect.Value.SetString устанавливает новое строковое значение
для переменной, представленной объектом reflect.Value.
Метод принимает один параметр - строку, которая будет установлена.
Важно понимать, что метод работает только с изменяемыми значениями
(полями структур, элементами слайсов, переменными, переданными по ссылке).
При попытке установить значение для неизменяемого объекта возникает паника.
Синтаксис
value.SetString(s string)
Пример
Давайте установим новое строковое значение для переменной, используя отражение:
package main
import (
"fmt"
"reflect"
)
func main() {
var str string = "old value"
val := reflect.ValueOf(&str).Elem()
if val.CanSet() {
val.SetString("new value")
}
fmt.Println(str)
}
Результат выполнения кода:
"new value"
Пример
Давайте изменим значение строкового поля структуры через отражение:
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "Alice", Age: 25}
val := reflect.ValueOf(&p).Elem()
nameField := val.FieldByName("Name")
if nameField.CanSet() {
nameField.SetString("Bob")
}
fmt.Println(p.Name)
}
Результат выполнения кода:
"Bob"
Пример
Попытка установить значение для неизменяемого объекта приводит к панике.
Всегда проверяйте доступность изменения через метод CanSet:
package main
import (
"fmt"
"reflect"
)
func main() {
var str string = "hello"
val := reflect.ValueOf(str)
fmt.Println("Can set:", val.CanSet())
// Если раскомментировать следующую строку, возникнет паника
// val.SetString("world")
}
Результат выполнения кода:
"Can set: false"
Смотрите также
-
метод
reflect.Value.Set,
который устанавливает значение любого типа -
метод
reflect.Value.SetInt,
который устанавливает целочисленное значение -
метод
reflect.Value.SetBool,
который устанавливает булево значение -
метод
reflect.Value.CanSet,
который проверяет возможность изменения значения