Связь между процессами является простым способом использования вывода первого процесса в качестве ввода для других процессов. Такой же концепт можно реализовать в Go, к примеру, чтобы связать данные из одного сокета с другим сокетом, создавая связь через туннель. В данной инструкции показано, как создать туннель с помощью использование встроенной библиотеки от Go.
Как создать туннель между процессами записи и чтения в Go?
1. Создайте файл pipe.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package main import ( "io" "log" "os" "os/exec" ) func main() { pReader, pWriter := io.Pipe() cmd := exec.Command("echo", "Hello Go!\nThis is example") cmd.Stdout = pWriter go func() { defer pReader.Close() if _, err := io.Copy(os.Stdout, pReader); err != nil { log.Fatal(err) } }() if err := cmd.Run(); err != nil { log.Fatal(err) } } |
2. Запустите код через go run pipe.go
;
3. Посмотрите на результат в терминале:
1 2 |
Hello Go! This is example |
Как работает созданный туннель из io.Pipe()
Функция io.Pipe()
создает туннель внутренней памяти и возвращает оба конца туннеля, с одной стороны PipeReader
и с другой стороны PipeWriter
. Каждый процесс записи в PipeWriter
блокируется, пока он не поглощается процессом чтения на другом конце.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»