Comments 7
Чем яблоко лучше автомобиля:
Оно легче помещается в карман
Оно слаще
....
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 проверить.
Сравнение двух функций в Go с указателями и без