Как одновременно прочитать построчно два файла?

В языке программирования 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, то значит чтение файлов завершено и мы выходим из цикла.

В итоге, данное решение позволяет одновременно читать строки из двух файлов и выводить их на экран.