Size: a a a

2020 April 18

DP

Daniel Podolsky in Go-go!
ну она очевидно вытекает из устройства среза
источник

DP

Daniel Podolsky in Go-go!
сделать по-другому можно было бы только специально
источник

C

Calculon in Go-go!
В принципе проблему можно решить просто написав комментарий к функции
источник

RS

Roman Sharkov in Go-go!
Great Cornilio
его головная боль мапу вернуть.
если в результате мапа получилась пустая - вернуть надо пустую мапу а не нил. нил должен быть только если рядом ошибка, а если её нет,возвращаемые  данные должны быть готовы к работе, имхо
такой дизайн может быть и чуток логичнее, но не оптимальнее, это trade-off, зачем лишние аллоки?
источник

zl

ziggy lucid in Go-go!
очевидной вещью будет то, что значение nil - это ничего, просто определение типа, и никаких операций с ним, кроме проверки на nil, произвести нельзя
источник

GC

Great Cornilio in Go-go!
не думаю, что в вашем коде этот аллок все заруинит.
логичность(читай предсказуемость) > экономия на семечках
источник

C

Calculon in Go-go!
Roman Sharkov
такой дизайн может быть и чуток логичнее, но не оптимальнее, это trade-off, зачем лишние аллоки?
За аллоками погонишься - растером станешь
источник

zl

ziggy lucid in Go-go!
Calculon
За аллоками погонишься - растером станешь
а unsafe кошерен?
источник

C

Calculon in Go-go!
ziggy lucid
а unsafe кошерен?
нет
источник

C

Calculon in Go-go!
Golang про приемлемую производительность без головной боли
источник

RS

Roman Sharkov in Go-go!
ziggy lucid
очевидной вещью будет то, что значение nil - это ничего, просто определение типа, и никаких операций с ним, кроме проверки на nil, произвести нельзя
очевидно было бы, если бы в Go у нас были sum-type’ы и тип Nil:

func Find(string name) *Object | Nil | error
func Find(string name) map[string]*Object | Nil | error
func Find(string name) []*Object | Nil | error


но увы 🙂

ни map ни *Object ни slice, ни интерфейсы не могли бы быть nil
источник

GC

Great Cornilio in Go-go!
никто не мешает вам.
источник

zl

ziggy lucid in Go-go!
Roman Sharkov
очевидно было бы, если бы в Go у нас были sum-type’ы и тип Nil:

func Find(string name) *Object | Nil | error
func Find(string name) map[string]*Object | Nil | error
func Find(string name) []*Object | Nil | error


но увы 🙂

ни map ни *Object ни slice, ни интерфейсы не могли бы быть nil
а по мне так логично, что nil - это пустой указатель в никуда
источник

zl

ziggy lucid in Go-go!
про срезы и карты - откровение, но применять такое не буду точно
источник

C

Calculon in Go-go!
ziggy lucid
про срезы и карты - откровение, но применять такое не буду точно
😄😄😄
источник

C

Calculon in Go-go!
а как жить
источник

RS

Roman Sharkov in Go-go!
ziggy lucid
а по мне так логично, что nil - это пустой указатель в никуда
нет. поясняю:

func F(t *T) *T

почему F принимает указатель? причин может быть несколько:
- копировать T дорого, поэтому ссылкой передаём
- мы хотим мутировать t в F
- t опциональна, её необязательно передавать
- любая комбинация из выше перечисленных

то-же самое и с возвратным указателем. Нам можно его мутировать? Или нам его дали ссылкой дабы не копировать? и т.д.

func F(t Nil | *T) *T // t is optional
func F(t *T) *T       // t is required, it cannot be “nil”
func F(t *T) Nil | *T // t is required, result might be absent
источник

zl

ziggy lucid in Go-go!
Roman Sharkov
нет. поясняю:

func F(t *T) *T

почему F принимает указатель? причин может быть несколько:
- копировать T дорого, поэтому ссылкой передаём
- мы хотим мутировать t в F
- t опциональна, её необязательно передавать
- любая комбинация из выше перечисленных

то-же самое и с возвратным указателем. Нам можно его мутировать? Или нам его дали ссылкой дабы не копировать? и т.д.

func F(t Nil | *T) *T // t is optional
func F(t *T) *T       // t is required, it cannot be “nil”
func F(t *T) Nil | *T // t is required, result might be absent
тут же вопрос был про то, можно ли возвращать nil, а не ошибку "не найдено"
зачем проверять результат на корректность? если ошибки нет, то результат готов к применению однозначно, даже если там пустой массив

а кто куда там будет мутировать - это дело десятое
источник

zl

ziggy lucid in Go-go!
про странное поведение nil я узнал 5 минут назад
даже не подумал бы никогда
источник

C

Calculon in Go-go!
да
Nil слайс можно использовать как валидный результат функции
Nil мапу нельзя
источник