Search
Write a publication
Pull to refresh

Comments 7

Чем яблоко лучше автомобиля:

  1. Оно легче помещается в карман

  2. Оно слаще

  3. ....

PROFIT!

Где пруфы, Билли? Нам нужны пруфы


Извините, но без бенчмарков и реальных цифр эти умозрения типа "Сферический конь в вакууме" и более подходят менеджерам. Напишите бенчмарки для каждого пункта утверждения, пожалуйста.

package main

import (
	"testing"
)

var (
	a1 = 10
	a2 = 20
)

func swapValuesP(first, second *int) (*int, *int) {
	temp := *first
	*first = *second
	*second = temp
	return first, second
}

func swapValuesV(first, second int) (int, int) {
	temp := first
	first = second
	second = temp
	return first, second
}

func BenchmarkSwapValuesP(b *testing.B) {
	for range b.N {
		swapValuesP(&a1, &a2)
	}
}

func BenchmarkSwapValuesV(b *testing.B) {
	for range b.N {
		swapValuesV(a1, a2)
	}
}
goos: linux
goarch: amd64
pkg: pointer_vs_copy
cpu: AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx
BenchmarkSwapValuesP
BenchmarkSwapValuesP-8      400667139            2.948 ns/op           0 B/op          0 allocs/op
BenchmarkSwapValuesV
BenchmarkSwapValuesV-8      1000000000           0.4211 ns/op          0 B/op          0 allocs/op
PASS
ok      pointer_vs_copy 1.990s

NO COMMENTS

В статье и написано, что инты эффективнее по значению передавать. Что вы хотели этим бенчмарком показать?

вот это тема, вот это открытие :)

попробуйте мьютекс или waitgroup передать в функцию по указателю и без. можно получить удивительнейшие результаты.

Хотелось бы увидеть юзкейсы, где лучше применять функции с указателем или без и какие будут плюсы-минусы. Без юзкейсов всё это слишком неопределенно.

Очень странно, почему вы не использовали синтаксис go для обмена значениями переменных:
first,second = second,first

*first,*second = *second,*first, кстати прежде чем разыменовывать указатели, было бы неплохо их на nil проверить.

Sign up to leave a comment.

Articles