DollyPapper
@DollyPapper

Как bytes.Buffer создает новый срез байтов через new?

Привет. Недавно начал учить Golang, и столкнулся со странным для себя поведением структуры bytes.Buffer.
Обычно через оператор new мы получаем нулевой указатель, но не в случае с bytes.Buffer который создает пустой слайс.
Как он это делает? В Go как-то возможно перегрузить оператор new?
В док комменте к структуре так и сказано:
The zero value for Buffer is an empty buffer ready to use.
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
WinPooh32
@WinPooh32
Stack Overflow answer searching expert
new возвращает всегда ненулевой указатель на аллоцированную память типа, который вы укажете в аргументе.

В Го перегрузки методов нет, тем более встроенных функций.

type Buffer struct {
	buf      []byte // contents are the bytes buf[off : len(buf)]
	off      int    // read at &buf[off], write at &buf[len(buf)]
	lastRead readOp // last read operation, so that Unread* can work correctly.
}


new(bytes.Buffer) не аллоцирует память под buf. Он будет nil. Только под саму структуру Buffer.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы