diff --git a/config/generic_reference_config.go b/config/generic_reference_config.go
index d47cfe355ea91801353557f63412b87cb4611e4c..87ec0002ca0ab58eb45e34546d7d0a04ed783d87 100644
--- a/config/generic_reference_config.go
+++ b/config/generic_reference_config.go
@@ -2,16 +2,18 @@ package config
 
 import (
 	"context"
-	"github.com/apache/dubbo-go/common/logger"
+	"errors"
 )
 
+const GenericReferKey = "GenericReferKey"
+
 type GenericService struct {
 	Invoke       func(req []interface{}) (interface{}, error) `dubbo:"$invoke"`
 	referenceStr string
 }
 
-func NewGenericService(reference string) *GenericService {
-	return &GenericService{referenceStr: reference}
+func NewGenericService(referenceStr string) *GenericService {
+	return &GenericService{referenceStr: GenericReferKey}
 }
 
 func (u *GenericService) Reference() string {
@@ -19,6 +21,7 @@ func (u *GenericService) Reference() string {
 }
 
 type GenericConsumerConfig struct {
+	ID             string
 	Protocol       string
 	Registry       string
 	Version        string
@@ -30,27 +33,9 @@ type GenericConsumerConfig struct {
 	genericService *GenericService
 }
 
-func (gConfig *GenericConsumerConfig) LoadGenericReferenceConfig(key string) {
-	gConfig.genericService = NewGenericService(key)
-	SetConsumerService(gConfig.genericService)
-	gConfig.NewGenericReferenceConfig(key)
-
-	rpcService := GetConsumerService(key)
-	if rpcService == nil {
-		logger.Warnf("%s is not exsist!", key)
-		return
-	}
+func (gConfig *GenericConsumerConfig) Load() (err error) {
 
-	gConfig.ref.id = key
-	gConfig.ref.Refer()
-	gConfig.ref.Implement(rpcService)
-
-}
-func (gConfig *GenericConsumerConfig) GetService() *GenericService {
-	return gConfig.genericService
-}
-func (gConfig *GenericConsumerConfig) NewGenericReferenceConfig(id string) {
-	gr := NewReferenceConfig(id, context.TODO())
+	gr := NewReferenceConfig(context.TODO())
 	//gr.Filter = "genericConsumer" //todo: add genericConsumer filter
 	gr.Registry = gConfig.Registry
 	gr.Protocol = gConfig.Protocol
@@ -60,4 +45,20 @@ func (gConfig *GenericConsumerConfig) NewGenericReferenceConfig(id string) {
 	gr.Cluster = gConfig.Cluster
 	gr.Methods = append(gr.Methods, &MethodConfig{Name: "$invoke", Retries: gConfig.Retries})
 	gConfig.ref = gr
+	gConfig.genericService = NewGenericService(gConfig.ID)
+	SetConsumerService(gConfig.genericService)
+	rpcService := GetConsumerService(GenericReferKey)
+	if rpcService == nil {
+		err = errors.New("get rpcService err,GenericReferKey not Set ")
+		return
+	}
+
+	gConfig.ref.id = gConfig.ID
+	gConfig.ref.Refer()
+	gConfig.ref.Implement(rpcService)
+	return
+
+}
+func (gConfig *GenericConsumerConfig) GetGenericService() *GenericService {
+	return gConfig.genericService
 }
diff --git a/config/generic_reference_config_test.go b/config/generic_reference_config_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..d912156bec00a9f00850ab2ec3a3baf1016c2141
--- /dev/null
+++ b/config/generic_reference_config_test.go
@@ -0,0 +1 @@
+package config
diff --git a/config/reference_config.go b/config/reference_config.go
index 0e08180295227260ae6f9e1c65e988fd9bdead7a..5300e46116d40c901d3a26eb18d068743244da13 100644
--- a/config/reference_config.go
+++ b/config/reference_config.go
@@ -61,8 +61,8 @@ func (c *ReferenceConfig) Prefix() string {
 	return constant.ReferenceConfigPrefix + c.InterfaceName + "."
 }
 
-func NewReferenceConfig(id string, ctx context.Context) *ReferenceConfig {
-	return &ReferenceConfig{id: id, context: ctx}
+func NewReferenceConfig(ctx context.Context) *ReferenceConfig {
+	return &ReferenceConfig{context: ctx}
 }
 
 func (refconfig *ReferenceConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
diff --git a/examples/dubbo/go-client/app/client.go b/examples/dubbo/go-client/app/client.go
index 63e7c91ddc2b483408b91bfacf9f6081bc312b96..d0694615a37c1c6c11f2ff2c22ae273288052fab 100644
--- a/examples/dubbo/go-client/app/client.go
+++ b/examples/dubbo/go-client/app/client.go
@@ -20,19 +20,21 @@ package main
 import (
 	"context"
 	"fmt"
-	"github.com/apache/dubbo-go/protocol/dubbo"
-	hessian "github.com/dubbogo/hessian2"
+
 	"os"
 	"os/signal"
 	"syscall"
 	"time"
 )
+import (
+	hessian "github.com/dubbogo/hessian2"
+)
 
 import (
 	"github.com/apache/dubbo-go/common/logger"
 	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
 	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
+	"github.com/apache/dubbo-go/protocol/dubbo"
 	_ "github.com/apache/dubbo-go/registry/protocol"
 
 	_ "github.com/apache/dubbo-go/filter/impl"
@@ -288,16 +290,18 @@ func test2() {
 	println("error: %v", err)
 }
 func test3() {
-	println("\n\n\nstart to generic invoke")
-	var genericConfig config.GenericConsumerConfig
-	genericConfig.InterfaceName = "com.ikurento.user.UserProvider"
-	genericConfig.Cluster = "failover"
-	genericConfig.Registry = "hangzhouzk"
-	genericConfig.Protocol = dubbo.DUBBO
-	genericConfig.LoadGenericReferenceConfig("getUser-generic")
+	var genericConfig = config.GenericConsumerConfig{
+		ID:            "UserProviderGer", //GetService的唯一标识不可缺少
+		InterfaceName: "com.ikurento.user.UserProvider",
+		Cluster:       "failover",
+		Registry:      "hangzhouzk",
+		Protocol:      dubbo.DUBBO,
+	}
+	genericConfig.Load()
 
 	time.Sleep(3 * time.Second)
-	resp, err := genericConfig.GetService().Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, []hessian.Object{"A003"}})
+	println("\n\n\nstart to generic invoke")
+	resp, err := genericConfig.GetGenericService().Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, []hessian.Object{"A003"}})
 	if err != nil {
 		panic(err)
 	}