В языке программирования Go одновременное чтение построчно двух файлов можно осуществить с использованием горутин и каналов.
Сначала нам понадобятся два файла, которые мы хотим прочитать. В данном примере предполагается, что файлы называются "file1.txt" и "file2.txt".
Для начала, создадим функцию, которая будет читать строки из файла и отправлять их в канал:
func readFile(filename string, ch chan string) { file, err := os.Open(filename) if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { ch <- scanner.Text() } if err := scanner.Err(); err != nil { log.Fatal(err) } close(ch) }
Затем, создадим функцию main, в которой мы будем инициализировать каналы, запускать горутины для чтения файлов и принимать строки из каналов:
func main() { ch1 := make(chan string) ch2 := make(chan string) go readFile("file1.txt", ch1) go readFile("file2.txt", ch2) for { select { case line1, ok := <-ch1: if !ok { ch1 = nil } else { fmt.Println(line1) } case line2, ok := <-ch2: if !ok { ch2 = nil } else { fmt.Println(line2) } } if ch1 == nil && ch2 == nil { break } } }
В функции main мы создаем два канала - ch1 и ch2, а затем запускаем горутины для чтения файлов "file1.txt" и "file2.txt" в эти каналы с помощью функции readFile(). Затем мы используем select для выбора случайной готовной операции на чтение из одного из каналов. Если в одном из каналов больше нет данных (канал закрыт), мы присваиваем nil этому каналу. После этого мы проверяем, если оба канала равны nil, то значит чтение файлов завершено и мы выходим из цикла.
В итоге, данное решение позволяет одновременно читать строки из двух файлов и выводить их на экран.