func createProxy(ins registry.ServiceInstance) service.MetadataService {
	urls := buildStandardMetadataServiceURL(ins)
	if len(urls) == 0 {
		logger.Errorf("metadata service urls not found, %v", ins)
		return nil
	}
	u := urls[0]
	p := extension.GetProtocol(u.Protocol)
	invoker := p.Refer(u)
	return &MetadataServiceProxy{
		invkr: invoker,
	}
}
createProxy creates an instance of MetadataServiceProxy
we read the metadata from ins.Metadata()
and then create an Invoker instance
also we will mark this proxy as golang's proxy
package local
import (
	"encoding/json"
	"sync"
)
import (
	"dubbo.apache.org/dubbo-go/v3/common"
	"dubbo.apache.org/dubbo-go/v3/common/constant"
	"dubbo.apache.org/dubbo-go/v3/common/extension"
	"dubbo.apache.org/dubbo-go/v3/common/logger"
	"dubbo.apache.org/dubbo-go/v3/metadata/service"
	"dubbo.apache.org/dubbo-go/v3/registry"
)
func init() {
	factory := service.NewBaseMetadataServiceProxyFactory(createProxy)
	extension.SetMetadataServiceProxyFactory(constant.DEFAULT_KEY, func() service.MetadataServiceProxyFactory {
		return factory
	})
}
var (
	factory service.MetadataServiceProxyFactory
	once    *sync.Once
)
func GetInMemoryMetadataServiceProxyFactory() service.MetadataServiceProxyFactory {
	once.Do(func() {
		factory = service.NewBaseMetadataServiceProxyFactory(createProxy)
	})
	return factory
}