You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: client.go
    path of file: ./repos/stack-rpc-tutorials/examples/deprecated/middle-practices/micro-wrapper/wrap-call
    
    the code of the file until where you have to start completion: package main

import (
	"context"
	"fmt"
	"time"

	proto "github.com/micro-in-cn/tutorials/examples/basic-practices/micro-service/proto"
	"github.com/micro/go-micro/client"
	"github.com/micro/go-micro/metadata"
	"github.com/micro/go-micro/registry"
	"github.com/micro/go-micro/util/log"
)

func NewCallWrapper1() client.CallWrapper {
	return func(cf client.CallFunc) client.CallFunc {
		return func(ctx context.Context, node *registry.Node, req client.Request, rsp interface{}, opts cl
    
func NewCallWrapper1() client.CallWrapper {
	return func(cf client.CallFunc) client.CallFunc {
		return func(ctx context.Context, node *registry.Node, req client.Request, rsp interface{}, opts client.CallOptions) error {
			// WrapCall在发生在均衡之后，此时已经知道要发给哪台服务
			log.Info("[NewCallWrapper1] 准备发往服务节点：", node.Address)

			// 修改请求参数
			body := req.Body().(*proto.HelloRequest)
			body.Name = "Micro China"

			// 模拟随机错误
			if time.Now().Second() < 20 {
				return fmt.Errorf("随机错误，请求中止！")
			}

			newMd := metadata.Metadata{}
			newMd["call-wrapped1"] = "call-wrapped-value1"
			ctx = metadata.NewContext(ctx, newMd)
			err := cf(ctx, node, req, rsp, opts)
			return err
		}
	}
}