From e1b73741be4c5550e550baf4b65e6b4339b8011f Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Fri, 7 Mar 2025 12:52:22 +0300 Subject: [PATCH] move to micro v4 Signed-off-by: Vasiliy Tolstov --- go.mod | 28 ++++++++------ go.sum | 69 +++++++++++++++++++++++++--------- micro/service_micro.pb.go | 12 ++---- micro/service_micro_grpc.pb.go | 11 +++--- options.go | 4 +- proto/service.pb.go | 4 +- proto/service.proto | 2 +- proto/service_grpc.pb.go | 33 +++++++++++----- service.go | 12 +++--- 9 files changed, 110 insertions(+), 65 deletions(-) diff --git a/go.mod b/go.mod index 633e3c1..ce01c8b 100644 --- a/go.mod +++ b/go.mod @@ -1,20 +1,24 @@ -module go.unistack.org/micro-config-service/v3 +module go.unistack.org/micro-config-service/v4 + +go 1.22.0 -go 1.18 require ( - dario.cat/mergo v1.0.0 - go.unistack.org/micro-server-http/v3 v3.11.11 - go.unistack.org/micro/v3 v3.10.44 - google.golang.org/grpc v1.62.1 - google.golang.org/protobuf v1.33.0 + dario.cat/mergo v1.0.1 + go.unistack.org/micro/v4 v4.1.3 + google.golang.org/grpc v1.71.0 + google.golang.org/protobuf v1.36.5 ) require ( - github.com/golang/protobuf v1.5.4 // indirect + github.com/ash3in/uuidv8 v1.2.0 // indirect github.com/google/uuid v1.6.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240304212257-790db918fca8 // indirect + github.com/matoous/go-nanoid v1.5.1 // indirect + github.com/spf13/cast v1.7.1 // indirect + go.unistack.org/micro-proto/v4 v4.1.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0a725d9..4c8cdfe 100644 --- a/go.sum +++ b/go.sum @@ -1,26 +1,59 @@ -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= +github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= +github.com/ash3in/uuidv8 v1.2.0 h1:2oogGdtCPwaVtyvPPGin4TfZLtOGE5F+W++E880G6SI= +github.com/ash3in/uuidv8 v1.2.0/go.mod h1:BnU0wJBxnzdEKmVg4xckBkD+VZuecTFTUP3M0dWgyY4= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -go.unistack.org/micro-server-http/v3 v3.11.11 h1:t9uPcXwtNjeCy6fj6LGY7F4dmHMXZ96U9vqNzD4gb6A= -go.unistack.org/micro-server-http/v3 v3.11.11/go.mod h1:gCWne+4AHidpl6oYDRygkEXbC0N8V0LW+TKBdYMrzdk= -go.unistack.org/micro/v3 v3.10.44 h1:Vgyy9BrJOSdFvo29/klrgIBE/Nme9E8udPAljos34o0= -go.unistack.org/micro/v3 v3.10.44/go.mod h1:erMgt3Bl7vQQ0e9UpQyR5NlLiZ9pKeEJ9+1tfYFaqUg= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240304212257-790db918fca8 h1:IR+hp6ypxjH24bkMfEJ0yHR21+gwPWdV+/IBrPQyn3k= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240304212257-790db918fca8/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= -google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/matoous/go-nanoid v1.5.1 h1:aCjdvTyO9LLnTIi0fgdXhOPPvOHjpXN6Ik9DaNjIct4= +github.com/matoous/go-nanoid v1.5.1/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= +go.unistack.org/micro-proto/v4 v4.1.0 h1:qPwL2n/oqh9RE3RTTDgt28XK3QzV597VugQPaw9lKUk= +go.unistack.org/micro-proto/v4 v4.1.0/go.mod h1:ArmK7o+uFvxSY3dbJhKBBX4Pm1rhWdLEFf3LxBrMtec= +go.unistack.org/micro/v4 v4.1.3 h1:9QHiLHBTfPtfKyoY3HsLPNVSK0wlAAoMV+9saLz2iR4= +go.unistack.org/micro/v4 v4.1.3/go.mod h1:lr3oYED8Ay1vjK68QqRw30QOtdk/ffpZqMFDasOUhKw= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484 h1:Z7FRVJPSMaHQxD0uXU8WdgFh8PseLM8Q8NzhnpMrBhQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA= +google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= +google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= +google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/micro/service_micro.pb.go b/micro/service_micro.pb.go index c8be5ea..2973480 100644 --- a/micro/service_micro.pb.go +++ b/micro/service_micro.pb.go @@ -1,24 +1,20 @@ // Code generated by protoc-gen-go-micro. DO NOT EDIT. // versions: -// - protoc-gen-go-micro v3.10.2 -// - protoc v3.21.12 +// - protoc-gen-go-micro v4.1.0 +// - protoc v5.29.3 // source: service.proto package servicepb import ( context "context" - proto "go.unistack.org/micro-config-service/v3/proto" - v3 "go.unistack.org/micro-server-http/v3" - client "go.unistack.org/micro/v3/client" + proto "go.unistack.org/micro-config-service/v4/proto" + client "go.unistack.org/micro/v4/client" ) var ( ConfigName = "Config" ) -var ( - ConfigServerEndpoints = []v3.EndpointMetadata{} -) type ConfigClient interface { Load(ctx context.Context, req *proto.LoadRequest, opts ...client.CallOption) (*proto.LoadResponse, error) diff --git a/micro/service_micro_grpc.pb.go b/micro/service_micro_grpc.pb.go index 1b77e15..3f63978 100644 --- a/micro/service_micro_grpc.pb.go +++ b/micro/service_micro_grpc.pb.go @@ -1,14 +1,14 @@ // Code generated by protoc-gen-go-micro. DO NOT EDIT. -// protoc-gen-go-micro version: v3.10.2 +// protoc-gen-go-micro version: v4.1.0 // source: service.proto package servicepb import ( context "context" - proto "go.unistack.org/micro-config-service/v3/proto" - client "go.unistack.org/micro/v3/client" - server "go.unistack.org/micro/v3/server" + proto "go.unistack.org/micro-config-service/v4/proto" + client "go.unistack.org/micro/v4/client" + server "go.unistack.org/micro/v4/server" ) type configClient struct { @@ -59,6 +59,5 @@ func RegisterConfigServer(s server.Server, sh ConfigServer, opts ...server.Handl config } h := &configServer{sh} - var nopts []server.HandlerOption - return s.Handle(s.NewHandler(&Config{h}, append(nopts, opts...)...)) + return s.Handle(s.NewHandler(&Config{h}, opts...)) } diff --git a/options.go b/options.go index 5816698..785eae8 100644 --- a/options.go +++ b/options.go @@ -1,8 +1,8 @@ package service import ( - "go.unistack.org/micro/v3/client" - "go.unistack.org/micro/v3/config" + "go.unistack.org/micro/v4/client" + "go.unistack.org/micro/v4/config" ) type clientKey struct{} diff --git a/proto/service.pb.go b/proto/service.pb.go index 38e6df5..683347e 100644 --- a/proto/service.pb.go +++ b/proto/service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.12 +// protoc v5.29.3 // source: service.proto package servicepb @@ -231,7 +231,7 @@ var file_service_proto_rawDesc = []byte{ 0x69, 0x63, 0x65, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x6f, 0x2e, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, + 0x69, 0x67, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } diff --git a/proto/service.proto b/proto/service.proto index a495ae1..b682b3f 100644 --- a/proto/service.proto +++ b/proto/service.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package service; -option go_package="go.unistack.org/micro-config-service/v3/proto;servicepb"; +option go_package="go.unistack.org/micro-config-service/v4/proto;servicepb"; service Config { rpc Load(LoadRequest) returns (LoadResponse) {}; diff --git a/proto/service_grpc.pb.go b/proto/service_grpc.pb.go index a68440a..3a79848 100644 --- a/proto/service_grpc.pb.go +++ b/proto/service_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc-gen-go-grpc v1.5.1 +// - protoc v5.29.3 // source: service.proto package servicepb @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( Config_Load_FullMethodName = "/service.Config/Load" @@ -40,8 +40,9 @@ func NewConfigClient(cc grpc.ClientConnInterface) ConfigClient { } func (c *configClient) Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (*LoadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(LoadResponse) - err := c.cc.Invoke(ctx, Config_Load_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Config_Load_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -49,8 +50,9 @@ func (c *configClient) Load(ctx context.Context, in *LoadRequest, opts ...grpc.C } func (c *configClient) Save(ctx context.Context, in *SaveRequest, opts ...grpc.CallOption) (*SaveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SaveResponse) - err := c.cc.Invoke(ctx, Config_Save_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Config_Save_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -59,16 +61,19 @@ func (c *configClient) Save(ctx context.Context, in *SaveRequest, opts ...grpc.C // ConfigServer is the server API for Config service. // All implementations must embed UnimplementedConfigServer -// for forward compatibility +// for forward compatibility. type ConfigServer interface { Load(context.Context, *LoadRequest) (*LoadResponse, error) Save(context.Context, *SaveRequest) (*SaveResponse, error) mustEmbedUnimplementedConfigServer() } -// UnimplementedConfigServer must be embedded to have forward compatible implementations. -type UnimplementedConfigServer struct { -} +// UnimplementedConfigServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedConfigServer struct{} func (UnimplementedConfigServer) Load(context.Context, *LoadRequest) (*LoadResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Load not implemented") @@ -77,6 +82,7 @@ func (UnimplementedConfigServer) Save(context.Context, *SaveRequest) (*SaveRespo return nil, status.Errorf(codes.Unimplemented, "method Save not implemented") } func (UnimplementedConfigServer) mustEmbedUnimplementedConfigServer() {} +func (UnimplementedConfigServer) testEmbeddedByValue() {} // UnsafeConfigServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ConfigServer will @@ -86,6 +92,13 @@ type UnsafeConfigServer interface { } func RegisterConfigServer(s grpc.ServiceRegistrar, srv ConfigServer) { + // If the following call pancis, it indicates UnimplementedConfigServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Config_ServiceDesc, srv) } diff --git a/service.go b/service.go index 5e3e62a..0c96b94 100644 --- a/service.go +++ b/service.go @@ -1,15 +1,15 @@ -package service // import "go.unistack.org/micro-config-service/v3" +package service import ( "context" "fmt" "dario.cat/mergo" - pbmicro "go.unistack.org/micro-config-service/v3/micro" - pb "go.unistack.org/micro-config-service/v3/proto" - "go.unistack.org/micro/v3/client" - "go.unistack.org/micro/v3/config" - rutil "go.unistack.org/micro/v3/util/reflect" + pbmicro "go.unistack.org/micro-config-service/v4/micro" + pb "go.unistack.org/micro-config-service/v4/proto" + "go.unistack.org/micro/v4/client" + "go.unistack.org/micro/v4/config" + rutil "go.unistack.org/micro/v4/util/reflect" ) var _ config.Config = &serviceConfig{}