Go language provides inbuilt support implementation of run-time reflection and allowing a program to manipulate objects with arbitrary types with the help of reflect package. The reflect.CanSet() Function in Golang is used to check whether the value of v can be changed. To access this function, one needs to imports the reflect package in the program.
Syntax:
func (v Value) CanSet() boolParameters: This function does not accept any parameters.
Return Value: This function returns the boolean value.
Below examples illustrate the use of above method in Golang:
Example 1:
// Golang program to illustrate // reflect.CanSet() Function package main import ( "reflect" "fmt" ) type ProductionInfo struct { StructA []Entry } type Entry struct { Field1 string Field2 int } func SetField(source interface{}, fieldName string, fieldValue string){ v := reflect.ValueOf(source) tt := reflect.TypeOf(source) for k := 0; k < tt.NumField(); k++ { fieldValue := reflect.ValueOf(v.Field(k)) // use of CanSet() method fmt.Println(fieldValue.CanSet()) if fieldValue.CanSet(){ fieldValue.SetString(fieldValue.String()) } } } // Main function func main() { source := ProductionInfo{} source.StructA = append(source.StructA, Entry{Field1: "A" , Field2: 2}) SetField(source, "Field1" , "NEW_VALUE" ) } |
Output:
false
Example 2:
// Golang program to illustrate // reflect.CanSet() Function package main import ( "fmt" "reflect" ) type ProductionInfo struct { StructA []Entry } type Entry struct { Field1 string Field2 int } func SetField(source interface{}, fieldName string, fieldValue string) { v := reflect.ValueOf(source).Elem() // use of CanSet() method fmt.Println(v.FieldByName(fieldName).CanSet()) if v.FieldByName(fieldName).CanSet() { v.FieldByName(fieldName).SetString(fieldValue) } } // Main function func main() { source := ProductionInfo{} source.StructA = append(source.StructA, Entry{Field1: "A" , Field2: 2}) fmt.Println( "Before: " , source.StructA[0]) SetField(&source.StructA[0], "Field1" , "NEW_VALUE" ) fmt.Println( "After: " , source.StructA[0]) } |
Output:
Before: {A 2} true After: {NEW_VALUE 2}
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.