Каковы различия между каналами в Windows и Linux?

Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{} следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.

Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:

pipeline := mongo.Pipeline{
    {{"$match", bson.D{{"createdata", 10}}}},
    {{"$group", bson.D{
        {"_id",        bson.D{{"type", "$type"}}}, 
        {"TotalFeeds", bson.D{{"$sum", 1}}},
    }}},
    {{"$project", bson.D{
        {"type", "

Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{} следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.

Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:

[110]

Проверьте ваше Feeds{} отображение структуры. Убедитесь, что либо вы указали отображение bson, то есть:

type Feeds struct {
    Type string `bson:"type"`
    TotalFeeds int `bson:"TotalFeeds"`
}

, либо на этапе проецирования $project вы используете согласованный корпус для полей. Например, укажите все строчные буквы type и totalfeeds или все прописные буквы Type и TotalFeeds.

pipeline := mongo.Pipeline{
    {{"$match", bson.D{{"createdata", 10}}}},
    {{"$group", bson.D{
        {"_id",        bson.D{{"type", "$type"}}}, 
        {"totalfeeds", bson.D{{"$sum", 1}}},
    }}},
    {{"$project", bson.D{
        {"type", "

Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{} следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.

Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:

[110]

Проверьте ваше Feeds{} отображение структуры. Убедитесь, что либо вы указали отображение bson, то есть:

[111]

, либо на этапе проецирования $project вы используете согласованный корпус для полей. Например, укажите все строчные буквы type и totalfeeds или все прописные буквы Type и TotalFeeds.

[112]

Тогда вам не нужно указывать отображение bson в структуре:

type MyStruct struct {
    Type string 
    Total int
}

Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson картирование.

id.type"}, {"totalfeeds", "$totalfeeds"}, {"_id", 0}}, }}, }

Тогда вам не нужно указывать отображение bson в структуре:

type MyStruct struct {
    Type string 
    Total int
}

Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson картирование.

id.type"}, {"TotalFeeds", "$TotalFeeds"}, {"_id", 0}}, }}, }

Проверьте ваше Feeds{} отображение структуры. Убедитесь, что либо вы указали отображение bson, то есть:

type Feeds struct {
    Type string `bson:"type"`
    TotalFeeds int `bson:"TotalFeeds"`
}

, либо на этапе проецирования $project вы используете согласованный корпус для полей. Например, укажите все строчные буквы type и totalfeeds или все прописные буквы Type и TotalFeeds.

pipeline := mongo.Pipeline{
    {{"$match", bson.D{{"createdata", 10}}}},
    {{"$group", bson.D{
        {"_id",        bson.D{{"type", "$type"}}}, 
        {"totalfeeds", bson.D{{"$sum", 1}}},
    }}},
    {{"$project", bson.D{
        {"type", "

Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{} следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.

Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:

[110]

Проверьте ваше Feeds{} отображение структуры. Убедитесь, что либо вы указали отображение bson, то есть:

[111]

, либо на этапе проецирования $project вы используете согласованный корпус для полей. Например, укажите все строчные буквы type и totalfeeds или все прописные буквы Type и TotalFeeds.

[112]

Тогда вам не нужно указывать отображение bson в структуре:

type MyStruct struct {
    Type string 
    Total int
}

Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson картирование.

id.type"}, {"totalfeeds", "$totalfeeds"}, {"_id", 0}}, }}, }

Тогда вам не нужно указывать отображение bson в структуре:

type MyStruct struct {
    Type string 
    Total int
}

Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson картирование.

17
задан Tanktalus 10 October 2008 в 19:27
поделиться

3 ответа

Одно различие, о котором я знаю, то, что именованные каналы в соответствии с Linux являются фактическими записями в файловой системе (Вы будете видеть его в списке каталогов, у них есть специальный тип), тогда как в Windows они хранятся в некотором волшебном репозитории где-нибудь (к ним все получают доступ через путь "\\.\pipe \".

, Во-вторых, в Linux Вы можете просто запись-чтение от каналов, как будто они были любым другим файлом, с помощью стандартного файла методы IO. Принимая во внимание, что на окнах, необходимо использовать специальные функции 'Канала', которые являются частью API Win32.

мне нравится метод Linux лучше, потому что он позволяет мне использовать каналы с любым приложением, которое я хочу. Например:

mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi

Это позволяет мне передать вывод по каналу декодера MP3 непосредственно в видеодекодер, вместо того, чтобы иметь необходимость сначала декодировать весь MP3 в файл WAV на диске. Удобно, если у Вас есть двухъядерный ЦП, потому что тогда Вы выполняете обе операции сразу для хорошего ускорения.

24
ответ дан 30 November 2019 в 11:53
поделиться

В соответствии с Linux (и *ix в целом), "все - файл". Можно считать/писать/искать каналы и сокеты и устройства без ограничений, поскольку те операции имеют смысл.

принимая во внимание, что Windows имеет намного меньше унифицированной архитектуры для этих различных типов объектов. Хотя я не мог сказать Вам детали, я знаю, что буферизация каналов значительно отличается между Windows и Linux, таким образом, можно столкнуться с трудностями там.

кроме того, одно общее использование Unix-y каналов к fork() подпроцесс, и затем свяжитесь с ним через канал (родитель открывает один конец, ребенок открывает другой конец). В соответствии с Windows, такая вещь просто не возможна. Механизмы IPC очень отличаются.

5
ответ дан 30 November 2019 в 11:53
поделиться

См. также предыдущее сообщение:

, Что такое именованные каналы?

, Который содержит мое взятие и несколько других народов

3
ответ дан 30 November 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: