Size: a a a

2020 May 21

DP

Daniel Podolsky in Go-go!
у нас есть выражение a.b.c.d.e

по хорошему, a b с d надо проверять на валидность, если мы не хотим словить nil pointer exception
источник

E

Edgar in Go-go!
Вот теперь понял
источник

E

Edgar in Go-go!
Да, метод будет кривой, для проверки
источник

ЛА

Локоть Анатолий... in Go-go!
Edgar
Да, метод будет кривой, для проверки
Либо же до боли простой и универсальный метод, но с помощью reflect
источник

RS

Roman Sharkov in Go-go!
Локоть Анатолий
Либо же до боли простой и универсальный метод, но с помощью reflect
нет 🙅‍♂️🙅‍♂️🙅‍♂️
источник

ЛА

Локоть Анатолий... in Go-go!
Roman Sharkov
нет 🙅‍♂️🙅‍♂️🙅‍♂️
Ой все...
Ну путь к универсальности в го, это 2 варианта. рефлект один из них и в принципе он вполне может использоваться, это встроенная возможность языка.
Другой вопрос, что тормозит это настолько, что круг юзкейсов весьма сужается.

Посмотрите в реализацию go templates, там почти все конструкции так и работают. За счёт этого достигается универсальность. Доступа к разным данным.

Другим способом может быть кодогенерация функции проверки на nil всех свойств структуры, в том числе вложенных. Тут все четко в плане типизации, но объем сгенерированного кода и поддержка этого добра.
в данном случае по-моему выбор между гигантской клизмой и сендвичем с дерьмом.
источник

RS

Roman Sharkov in Go-go!
Локоть Анатолий
Ой все...
Ну путь к универсальности в го, это 2 варианта. рефлект один из них и в принципе он вполне может использоваться, это встроенная возможность языка.
Другой вопрос, что тормозит это настолько, что круг юзкейсов весьма сужается.

Посмотрите в реализацию go templates, там почти все конструкции так и работают. За счёт этого достигается универсальность. Доступа к разным данным.

Другим способом может быть кодогенерация функции проверки на nil всех свойств структуры, в том числе вложенных. Тут все четко в плане типизации, но объем сгенерированного кода и поддержка этого добра.
в данном случае по-моему выбор между гигантской клизмой и сендвичем с дерьмом.
предложите вменяемый вариант решения проблемы с помощью рефлексии. Я сомневаюсь что вам это удастся
источник

DP

Daniel Podolsky in Go-go!
Локоть Анатолий
Ой все...
Ну путь к универсальности в го, это 2 варианта. рефлект один из них и в принципе он вполне может использоваться, это встроенная возможность языка.
Другой вопрос, что тормозит это настолько, что круг юзкейсов весьма сужается.

Посмотрите в реализацию go templates, там почти все конструкции так и работают. За счёт этого достигается универсальность. Доступа к разным данным.

Другим способом может быть кодогенерация функции проверки на nil всех свойств структуры, в том числе вложенных. Тут все четко в плане типизации, но объем сгенерированного кода и поддержка этого добра.
в данном случае по-моему выбор между гигантской клизмой и сендвичем с дерьмом.
ну напишите такой, попробуйте
источник

RS

Roman Sharkov in Go-go!
Локоть Анатолий
Ой все...
Ну путь к универсальности в го, это 2 варианта. рефлект один из них и в принципе он вполне может использоваться, это встроенная возможность языка.
Другой вопрос, что тормозит это настолько, что круг юзкейсов весьма сужается.

Посмотрите в реализацию go templates, там почти все конструкции так и работают. За счёт этого достигается универсальность. Доступа к разным данным.

Другим способом может быть кодогенерация функции проверки на nil всех свойств структуры, в том числе вложенных. Тут все четко в плане типизации, но объем сгенерированного кода и поддержка этого добра.
в данном случае по-моему выбор между гигантской клизмой и сендвичем с дерьмом.
> кодогенерация функции проверки на nil всех свойств структуры, в том числе вложенных

нет, просто нет.
источник

ЛА

Локоть Анатолий... in Go-go!
Южный парк кто-то смотрел? Последний абзац как бы говорит, что выбор предстоит из всех плохих вариантов
источник

DP

Daniel Podolsky in Go-go!
мой вариант мне нравится
источник

s

snip in Go-go!
идея на самом деле не плохая, хотя изначально мне показалась путанной
не уверен что возможность такая прям очень важна и нужна, но тем не менее
ну и мне все таки больше нравится вариант с просто проверкой, без возврата зиро вэлью и кстати тогда и PoC реализовать проще, не нужны будут импорты
ну и имеем
baz  = ? f.Foo.Bar.Baz

vs
var baz *Baz
if assert(f.Foo.Bar.Baz) {
 baz = f.Foo.Bar.Baz
}

ну и вместо assert может быть что то более подходящее
источник

AR

Aleksandr Razumov in Go-go!
gqlgen вроде как раз кодогенерирует
источник

RS

Roman Sharkov in Go-go!
snip
идея на самом деле не плохая, хотя изначально мне показалась путанной
не уверен что возможность такая прям очень важна и нужна, но тем не менее
ну и мне все таки больше нравится вариант с просто проверкой, без возврата зиро вэлью и кстати тогда и PoC реализовать проще, не нужны будут импорты
ну и имеем
baz  = ? f.Foo.Bar.Baz

vs
var baz *Baz
if assert(f.Foo.Bar.Baz) {
 baz = f.Foo.Bar.Baz
}

ну и вместо assert может быть что то более подходящее
> мне все таки больше нравится вариант с просто проверкой, без возврата зиро вэлью

это как?
источник

RS

Roman Sharkov in Go-go!
@snipnick просто bool возвращать?
источник

s

snip in Go-go!
да
источник

RS

Roman Sharkov in Go-go!
я не просто так за v, ok :=

он же, как я упоминал, и с каналами и с map’ами работает

следственно, я не хочу создать что-то новое, лишь существующее сделать более универсальным
источник

RS

Roman Sharkov in Go-go!
Roman Sharkov
type Val struct { Value float64 }
type Bar struct { Baz map[string][]Val }
type Foo struct { Bar *Bar }

var m map[string]string
var s []int64
var c chan struct{}
var foo *Foo

v, ok := ? m[“key”] // v string
v, ok := ? s[2] // v int64
v, ok := ? <-c // v struct{}
v, ok := ? foo.Bar // v *Bar
v, ok := ? foo.Bar.Baz // map[string]Val
v, ok := ? foo.Bar.Baz[“key”][10].Value // v float64
@snipnick ☝️🏻
источник

s

snip in Go-go!
ну это го, здесь уже это не соблюдается, поэтому не вижу смысла привязываться к этому
источник

RS

Roman Sharkov in Go-go!
snip
ну это го, здесь уже это не соблюдается, поэтому не вижу смысла привязываться к этому
ну можно конечно и вообще просто:

v, ok := f.Bar.Baz
источник