config: export method to init new empty struct

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2020-12-20 00:15:29 +03:00
parent 150e8ad698
commit b50855855b
2 changed files with 45 additions and 1 deletions

View File

@ -1,6 +1,8 @@
package config
import "reflect"
import (
"reflect"
)
func IsEmpty(v reflect.Value) bool {
switch v.Kind() {
@ -26,3 +28,19 @@ func IsEmpty(v reflect.Value) bool {
}
return false
}
func Zero(src interface{}) (interface{}, error) {
sv := reflect.ValueOf(src)
if sv.Kind() == reflect.Ptr {
sv = sv.Elem()
}
if sv.Kind() == reflect.Invalid {
return nil, ErrInvalidStruct
}
dst := reflect.New(sv.Type())
return dst.Interface(), nil
}

26
config/reflect_test.go Normal file
View File

@ -0,0 +1,26 @@
package config_test
import (
"testing"
"github.com/unistack-org/micro/v3/config"
)
type Config struct {
Value string
SubConfig *SubConfig
Config *Config
}
type SubConfig struct {
Value string
}
func TestReflect(t *testing.T) {
cfg1 := &Config{Value: "cfg1", Config: &Config{Value: "cfg1_1"}, SubConfig: &SubConfig{Value: "cfg1"}}
cfg2, err := config.Clone(cfg1)
if err != nil {
t.Fatal(err)
}
t.Logf("dst: %#+v\n", cfg2)
}