Size: a a a

2020 May 21

RS

Roman Sharkov in Go-go!
pragus
Но как вам *unsafe.Pointer ? ))
unsafe от словосочитания “universally safe” 😉
источник

АП

Александр Попов... in Go-go!
опять вредные советы?
источник

p

pragus in Go-go!
Roman Sharkov
unsafe от словосочитания “universally safe” 😉
😂😂😂😂
источник

RS

Roman Sharkov in Go-go!
Александр Попов
опять вредные советы?
подготавливаю кандидатов на Darwin Award, простите.
источник

RS

Roman Sharkov in Go-go!
Переслано от Roman Sharkov
Сегодня в нашей рубрике забавные и полезные факты из мира Go - Интерфейсы и производительность

// здесь мы передаём копию структуры в интерфейс, через который вызывается функция
if err := Either(
 ctx,
 Owner{ID: UserID},
 Authenticated{},
); err != nil {
 panic(err)
}


результаты бенчмарка:
BenchmarkInterface-8   30738297   34.4 ns/op   16 B/op   1 allocs/op

объяснение:
1. структура создаётся на heap’е, поскольку попадает в интерфейс утекая из своего первоначального scope’а.
2. вызов метода через интерфейс всегда немного медленее из-за late-binding’а


// здесь мы передаём функцию напрямую
if err := Either(
 ctx,
 Owner{ID: UserID}.Authorize,
 Authenticated,
); err != nil {
 panic(err)
}


результаты бенчмарка:
BenchmarkFunc-8   203849019   5.68 ns/op   0 B/op   0 allocs/op

объяснение:
1. избежание интерфейса позволяет избегать лишние аллокации.
2. прямой вызов функции это очень дёшево.
источник

VM

Vladislav Milenin in Go-go!
Roman Sharkov
Переслано от Roman Sharkov
Сегодня в нашей рубрике забавные и полезные факты из мира Go - Интерфейсы и производительность

// здесь мы передаём копию структуры в интерфейс, через который вызывается функция
if err := Either(
 ctx,
 Owner{ID: UserID},
 Authenticated{},
); err != nil {
 panic(err)
}


результаты бенчмарка:
BenchmarkInterface-8   30738297   34.4 ns/op   16 B/op   1 allocs/op

объяснение:
1. структура создаётся на heap’е, поскольку попадает в интерфейс утекая из своего первоначального scope’а.
2. вызов метода через интерфейс всегда немного медленее из-за late-binding’а


// здесь мы передаём функцию напрямую
if err := Either(
 ctx,
 Owner{ID: UserID}.Authorize,
 Authenticated,
); err != nil {
 panic(err)
}


результаты бенчмарка:
BenchmarkFunc-8   203849019   5.68 ns/op   0 B/op   0 allocs/op

объяснение:
1. избежание интерфейса позволяет избегать лишние аллокации.
2. прямой вызов функции это очень дёшево.
Думаю все кто копались в логгерах это знают
Но новичкас полезно
источник

АП

Александр Попов... in Go-go!
Roman Sharkov
Переслано от Roman Sharkov
Сегодня в нашей рубрике забавные и полезные факты из мира Go - Интерфейсы и производительность

// здесь мы передаём копию структуры в интерфейс, через который вызывается функция
if err := Either(
 ctx,
 Owner{ID: UserID},
 Authenticated{},
); err != nil {
 panic(err)
}


результаты бенчмарка:
BenchmarkInterface-8   30738297   34.4 ns/op   16 B/op   1 allocs/op

объяснение:
1. структура создаётся на heap’е, поскольку попадает в интерфейс утекая из своего первоначального scope’а.
2. вызов метода через интерфейс всегда немного медленее из-за late-binding’а


// здесь мы передаём функцию напрямую
if err := Either(
 ctx,
 Owner{ID: UserID}.Authorize,
 Authenticated,
); err != nil {
 panic(err)
}


результаты бенчмарка:
BenchmarkFunc-8   203849019   5.68 ns/op   0 B/op   0 allocs/op

объяснение:
1. избежание интерфейса позволяет избегать лишние аллокации.
2. прямой вызов функции это очень дёшево.
а где функция то? O_o
источник

АП

Александр Попов... in Go-go!
может я слепой
источник

RS

Roman Sharkov in Go-go!
Александр Попов
а где функция то? O_o
она тут не объявлена, но это неважно)
источник

АП

Александр Попов... in Go-go!
первый пример просто не понятно
источник

АП

Александр Попов... in Go-go!
что есть "копия структура в интерфейс через который вызывается функция" что есть "вызов через интерфейс"? функция хочет интерфейс?
источник

RS

Roman Sharkov in Go-go!
Александр Попов
что есть "копия структура в интерфейс через который вызывается функция" что есть "вызов через интерфейс"? функция хочет интерфейс?
type SomeStruct{}

func (SomeStruct) SomeMethod() bool { return true }

type SomeInterface interface { SomeMethod() bool }

var i SomeInterface = SomeStruct{}
i.SomeMethod()
источник

АП

Александр Попов... in Go-go!
я правильно понял что ты сравниваешь вызов "метода структуры" обернутой в интерфейс и без?
источник

RS

Roman Sharkov in Go-go!
Александр Попов
я правильно понял что ты сравниваешь вызов "метода структуры" обернутой в интерфейс и без?
верно
источник

АП

Александр Попов... in Go-go!
звучит как то банально
источник

АП

Александр Попов... in Go-go!
поэтому в гоу правил - возращаем структуру, получаем интерфейс
источник

АП

Александр Попов... in Go-go!
для меня лично было открытием следующее поведение, ну открытие конечно громко сказано - https://play.golang.org/p/XYQpzNWWa0n
источник

АП

Александр Попов... in Go-go!
оказываеся оно сбрасывает cap, а не наследует
источник

RS

Roman Sharkov in Go-go!
Одна команда из Германии, несколько лет назад, всё спрятала за интерфейсами, вплодь до float64 (зачем уже точно не помню) и у них Go выстрелил, в ногу правда, но это уже мелочи.
источник

АП

Александр Попов... in Go-go!
хотя не вру, как раз cap оно наследует
источник