package clipboard import ( "sync" ) type Clipboard interface { Copy(text string) Paste() <-chan string } type virtualClipboard string func (clip *virtualClipboard) Copy(text string) { *clip = virtualClipboard(text) } var ch = make(chan string) func (clip *virtualClipboard) Paste() <-chan string { go func() { ch <- string(*clip) }() return ch } var defaultClipboard virtualClipboard var clipboard Clipboard = &defaultClipboard var mut sync.RWMutex func Get() Clipboard { mut.RLock() c := clipboard mut.RUnlock() return c } func Set(c Clipboard) { mut.Lock() clipboard = c mut.Unlock() }