Нетипизированный канал на Голанге - PullRequest
0 голосов
/ 02 марта 2019

Я пишу какой-то пакет, в котором канал используется только для прерывания какого-либо процесса, поэтому он никогда не читает никакого значения, просто обнаруживает, что его нужно остановить, например:

func myfunc(stop_chan chan /*bool*/) {
  for {
    //do something time consuming
    // ....
    // check on channel
    select{
      case <-stop_chan:
        //cleanup
        return
      default:
    }
    // continue working
  }
}

позже яхотите, чтобы эта функция принимала любой тип канала.Это возможно?

1 Ответ

0 голосов
/ 02 марта 2019

Я хочу, чтобы эта функция принимала любой тип канала.Это возможно?

Нет, это невозможно.В Go нет нетипизированных каналов.Вы можете принять канал любого типа, используя interface{}, а затем использовать отражение для взаимодействия с этим каналом.Но это громоздко и медленно, поэтому не рекомендуется.

Возможно, лучшим подходом является выбор одного типа канала (chan struct{} - естественный выбор для вашего варианта использования) или использованиеcontext переменная, которая может обрабатывать отмену стандартизированным способом.

...