Какой тип канала следует использовать, когда сообщение никогда не оценивается? - PullRequest
0 голосов
/ 02 февраля 2019

С помощью следующего оператора select я хочу убедиться, что некоторая неблокирующая функция выполняется только одна за другой:

select {
case <-available:
default:
    fmt.Println("busy")
    return
}
go func() {
    defer func() { available <- true }()
    doSomethingOneByOne()
}()

В настоящее время я использую bool в качестве типа канала, и он работает какожидается.

Что мне не нравится, так это то, что использование bool предполагает, что имеет значение, является ли значение true или false.Но на самом деле это не имеет значения в этом случае.По моему мнению, это усложняет понимание кода, потому что он вводит в заблуждение.

Существует ли соглашение о том, какой тип использовать, когда значение не имеет значения?

1 Ответ

0 голосов
/ 02 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...