mirror of
https://github.com/ManyakRus/starter.git
synced 2025-11-28 23:20:10 +02:00
сделал Set_FieldFromEnv_String()
This commit is contained in:
@@ -1286,3 +1286,41 @@ func Date_from_TimestampReference(Timestamp *timestamppb.Timestamp) time.Time {
|
|||||||
|
|
||||||
return Otvet
|
return Otvet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetFieldValue - устанавливает значение поля в структуре
|
||||||
|
// Параметры:
|
||||||
|
// Object - ссылка(&) на структуру
|
||||||
|
// FieldName - название поля
|
||||||
|
// Value - значение нужного типа
|
||||||
|
// Возвращает ошибку
|
||||||
|
func SetFieldValue(Object any, FieldName string, Value any) error {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
ref := reflect.ValueOf(Object)
|
||||||
|
|
||||||
|
//sanek
|
||||||
|
if ref.Kind() != reflect.Ptr {
|
||||||
|
err = fmt.Errorf("expected pointer but got %s", ref.Kind().String())
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// if its a pointer, resolve its Value
|
||||||
|
if ref.Kind() == reflect.Ptr {
|
||||||
|
ref = reflect.Indirect(ref)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ref.Kind() == reflect.Interface {
|
||||||
|
ref = ref.Elem()
|
||||||
|
}
|
||||||
|
|
||||||
|
//should double check we now have a struct (could still be anything)
|
||||||
|
if ref.Kind() != reflect.Struct {
|
||||||
|
err = fmt.Errorf("expected struct but got %s", ref.Kind().String())
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
prop := ref.FieldByName(FieldName)
|
||||||
|
prop.Set(reflect.ValueOf(Value))
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -1282,3 +1282,29 @@ func TestDate_from_TimestampReference(t *testing.T) {
|
|||||||
t.Errorf("Expected time.Time{}, but got %s", result)
|
t.Errorf("Expected time.Time{}, but got %s", result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSetFieldValue(t *testing.T) {
|
||||||
|
type Struct1 struct {
|
||||||
|
Field1 string
|
||||||
|
}
|
||||||
|
|
||||||
|
Struct := &Struct1{}
|
||||||
|
SetFieldValue(Struct, "Field1", "Test")
|
||||||
|
|
||||||
|
if Struct.Field1 != "Test" {
|
||||||
|
t.Errorf("Expected 'Test', but got %s", Struct.Field1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSetFieldValue2(t *testing.T) {
|
||||||
|
type Struct1 struct {
|
||||||
|
Field1 int
|
||||||
|
}
|
||||||
|
|
||||||
|
Struct := &Struct1{}
|
||||||
|
SetFieldValue(Struct, "Field1", "1")
|
||||||
|
|
||||||
|
if Struct.Field1 != 1 {
|
||||||
|
t.Errorf("Expected 'Test', but got %v", Struct.Field1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
package microl
|
package microl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/ManyakRus/starter/log"
|
"github.com/ManyakRus/starter/log"
|
||||||
|
"github.com/ManyakRus/starter/micro"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -17,3 +19,19 @@ func Getenv(Name string, IsRequired bool) string {
|
|||||||
|
|
||||||
return Otvet
|
return Otvet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set_FieldFromEnv_String - устанавливает значение поля из переменной окружения
|
||||||
|
// Параметры:
|
||||||
|
// Object - указатель на структуру
|
||||||
|
// FieldName - имя поля
|
||||||
|
func Set_FieldFromEnv_String(StructReference any, FieldName string, IsRequired bool) {
|
||||||
|
Value := Getenv(FieldName, IsRequired)
|
||||||
|
|
||||||
|
err := micro.SetFieldValue(StructReference, FieldName, Value)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("SetFieldFrom() FieldName: %s error: %w", FieldName, err)
|
||||||
|
log.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1,23 @@
|
|||||||
package microl
|
package microl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSet_FieldFromEnv(t *testing.T) {
|
||||||
|
type Struct1 struct {
|
||||||
|
TestSet_FieldFromEnv string
|
||||||
|
}
|
||||||
|
|
||||||
|
Name := "TestSet_FieldFromEnv"
|
||||||
|
os.Setenv(Name, Name)
|
||||||
|
|
||||||
|
Struct := Struct1{}
|
||||||
|
Set_FieldFromEnv_String(&Struct, Name, true)
|
||||||
|
|
||||||
|
if Struct.TestSet_FieldFromEnv != Name {
|
||||||
|
t.Error("Set_FieldFromEnv_String() error")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user