golang понимание функции копирования - PullRequest
0 голосов
/ 20 апреля 2020

Эй, ребята, я играл с некоторыми буферами, и я просто написал некоторый код, чтобы понять, как работает Read () temp[:n] для записи байтов, но, глядя на вывод, я понял, что буфер tmp не очищается на каждой итерации, также, когда n равен 1, не должно ли содержимое буфера быть EL, я имею в виду, что к L добавляется предваряющий TMP не добавляется. Я посмотрел на функцию чтения, но не смог понять. Может кто-нибудь объяснить это мне.

1 Ответ

1 голос
/ 20 апреля 2020

На первой итерации Read читает два байта, и ваша программа выводит HE. Во второй итерации Read считывает один байт в tmp. Теперь tmp[0] содержит этот байт, но tmp[1] все еще содержит чтение E во время первой итерации. Однако вы добавляете все tmp к dest, получая HELE. В третий раз read читает 0 байтов, но вы все равно добавляете LE в tmp к dest.

. Правильная версия вашей программы:

 for {
        n, err := dataReader.Read(tmp)
        fmt.Println(n)
        fmt.Println(string(tmp))
        dest = append(dest, tmp[:n]...)

        if err == io.EOF {
            break
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...