@edison
Для передачи данных между различными приложениями на Golang можно использовать сигналы операционной системы. Одним из наиболее распространенных способов является использование пакета os/signal
.
Вот пример, демонстрирующий, как передать данные из одного приложения в другое с использованием сигналов:
Приложение, отправляющее данные (main.go):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { // Создаем канал для получения сигналов sigs := make(chan os.Signal, 1) // Указываем, какие сигналы будем обрабатывать signal.Notify(sigs, syscall.SIGUSR1) // Ожидаем получения сигнала fmt.Println("Ожидание сигнала...") <-sigs fmt.Println("Получен сигнал!") // Отправляем данные в другое приложение через stdout fmt.Println("Это данные, которые передаются") } |
Приложение, принимающее данные (receiver.go):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package main import ( "bufio" "fmt" "os" ) func main() { // Читаем данные из stdin scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { fmt.Println("Получены данные:", scanner.Text()) } if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "Ошибка чтения данных:", err) os.Exit(1) } } |
Запустите первое приложение:
1
|
go run main.go |
Затем запустите второе приложение в другом окне терминала:
1
|
go run receiver.go |
В результате второе приложение будет ожидать получение сигнала. Когда вы запустите первое приложение, оно отправит сигнал SIGUSR1 второму приложению и передаст данные через stdout. Второе приложение распечатает полученные данные.
Примечание: В этом примере используется сигнал SIGUSR1, но вы можете выбрать любой другой сигнал, доступный вашей операционной системой.