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: keeper.go
    path of file: ./repos/kubeedge/staging/src/github.com/kubeedge/beehive/pkg/core/socket/synckeeper
    
    the code of the file until where you have to start completion: package synckeeper

import (
	"fmt"
	"sync"

	"k8s.io/klog/v2"

	"github.com/kubeedge/beehive/pkg/core/model"
)

// Keeper keeper
type Keeper struct {
	syncKeeper map[string]chan model.Message
	keeperLock sync.RWMutex
}

// NewKeeper new keeper
func NewKeeper() *Keeper
    
func (k *Keeper) SendToKeepChannel(message model.Message) error {
	k.keeperLock.RLock()
	defer k.keeperLock.RUnlock()

	channel, exist := k.syncKeeper[message.GetParentID()]
	if !exist {
		klog.Errorf("failed to get sync keeper channel, message: %s", message.String())
		return fmt.Errorf("failed to get sync keeper channel, message:%s", message.String())
	}

	// send response into synckeep channel
	select {
	case channel <- message:
	default:
		klog.Errorf("failed to send message to sync keep channel")
		return fmt.Errorf("failed to send message to sync keep channel")
	}
	return nil
}