@jajabin

Как вернуть управление в функцию?

При помощи библиотеки https://github.com/gizak/termui пытаюсь реализовать системную меню с переключателями, функция что отрисовывает при переключение работает, но для того чтобы переключиться необходимо нажать клавишу два раза, вопрос в том, как передать управление из одной функции в другую посредством канала, так как я понимаю при первом нажатие я выхожу из функции и только при втором нажатие обработка происходит переключение.
func (self *consoleUserInterface)ListenAndServer() {
	ticker := time.NewTicker(time.Second)
	DrawInfo(self)
	termui.Render(self.TabPane, self.info)
	events := termui.PollEvents()
 for {
		select {
			case e := <-events:
			switch e.ID {
			case "q", "<C-c>":
				termui.Close()
				return
			case "d":
				ticker.Stop()
				self.TabPane.FocusRight()
				termui.Clear()
				termui.Render(self.TabPane)
				self.RenderTab()
			case "a":
				ticker.Stop()
				self.TabPane.FocusLeft()
				termui.Clear()
				termui.Render(self.TabPane)
				self.RenderTab()
			}
		case <-ticker.C:
			DrawInfo(self)
		}

	}
}
func (self *consoleUserInterface)RenderTab(){
	ticker := time.NewTicker(time.Second)
	var done = make(chan bool,1)

 loop:switch self.TabPane.ActiveTabIndex {
		case 0:
			go func() {os.Stdin.Read(make([]byte, 1)); done <- true}()
	 		for  range ticker.C{
				if len(done) > 0{
					<-done
					break loop
				}
				DrawInfo(self)

			}
		case 1:
			termui.Render()

	}
	return
}
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы