Pull to refresh

Comments 6

У вас вроде опечатка

for i := range inputs {

for _, i := range inputs {

Нет i - это индекс массива, он идет первым в range

Потом по этому индексу берется значение

input[i]

Тем не менее там есть опечатка (объявлен input а range по inputs)

Попытка бросить в читателя кусок случайного кода не работает

Немного не по теме, но, кажется, отчёты pvs-studio на хабре именно такие статьи из себя и представляют.

Статья хорошая, спасибо!

Знать как устроены структуры данных неплохо. Однако стоит заметить, что если задача стоит в эффективной и быстрой сериализации/десериализации, то вместо изобретения своих форматов передачи и дальнейших героических усилий по их оптимизации, стоит посмотреть на protobuf: он максимально быстр и использует минимальный объем памяти, т к использует тотже unsafe, только там все протестировано вдоль и поперек и точно все работает как нужно на той версии go, которая у вас будет. А в качестве бонуса: поддержка других языков, расширяемость и никаких проблем с определением начала и конца сообщения (а еще grpc)

Я хоть в ГО и не умею , но с интересом прочитал до конца. Спасибо.

Начиная с Go 1.20 лучше всего использовать следующий вариант:

func StringToBytes(s string) []byte {
	return unsafe.Slice(unsafe.StringData(s), len(s))
}

func BytesToString(b []byte) string {
	return unsafe.String(unsafe.SliceData(b), len(b))
}

Sign up to leave a comment.

Articles