package debian import ( "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" ) func setString(pb proto.Message, varname string, val string) bool { msg := pb.ProtoReflect() // This is the entry point to the reflection API. descriptor := msg.Descriptor() // Get the message's descriptor, which contains metadata about its fields. fieldName := protoreflect.Name(varname) fieldDescriptor := descriptor.Fields().ByName(fieldName) if fieldDescriptor == nil { return false } if fieldDescriptor.Kind() != protoreflect.StringKind { // The field exists but is not a string, so we can't return it as one. return false } valueToSet := protoreflect.ValueOfString(varname) // 6. If the field exists and is a string, get its value. // The value is returned as a protoreflect.Value. msg.Set(fieldDescriptor, valueToSet) // 7. Convert the protoreflect.Value to a native Go string. return true }