@gogolang

Страница 1549 из 1630
Tux
13.10.2018
08:05:14
штооооо?
switch true ... case option.is_some(val)

Daniel
13.10.2018
08:05:16
споры за раст тут оффтоп :)

Tux
13.10.2018
08:05:45
мы ж про гошку

Alexander
13.10.2018
08:07:36
case option.some(val) -> case option.is_some(val)
нет, ну ясно что опшн или резулт или ещё что можно нагородить через интерфейсы, но это сложно же и неэффективно

Google
Tux
13.10.2018
08:07:51
даже проще можно

Evgenij
13.10.2018
08:07:59
мы ж про гошку
интересный подход - напиши туды где принимают в роад на голосование

Tux
13.10.2018
08:10:04
можно обойтись func enum(type int, body interface{}) -> Enum у Enum добавить два метода func type() -> int; func data() -> interface{}

Alexander
13.10.2018
08:13:54
можно обойтись func enum(type int, body interface{}) -> Enum у Enum добавить два метода func type() -> int; func data() -> interface{}
я вот честно говоря вообще не могу сообразить как ты пролему типов сумм собрался таким вот образом решать и чем это вообще лучше использования просто пустого интерфейса с тайпсвичами

Tux
13.10.2018
08:14:41
я про матчинг же

?
13.10.2018
08:14:56
коллеги, расскажите мне пожалуйста, что за algebraic types, в каких языках они есть и где их реально применяют?

Evgenij
13.10.2018
08:16:23
я про матчинг же
кстати да в раст так)в го думаю проблемы на уровне низком)))

я про матчинг же
а это было бы ок

Tux
13.10.2018
08:17:01
тайпсвитч работает со структурами?

Daniel
13.10.2018
08:17:21
а?!

Evgenij
13.10.2018
08:18:33
а?!
присоединяюсь - какой такой типсватч?

?
13.10.2018
08:18:53
@onokonem

Daniel
13.10.2018
08:18:59
я

Google
?
13.10.2018
08:19:25
я
https://t.me/gogolang/154809 help me

Daniel
13.10.2018
08:20:24
https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85

Evgenij
13.10.2018
08:21:31
Daniel
13.10.2018
08:21:41
enum, которого нам часто не хватает - тоже алгебраический тип

Alexander
13.10.2018
08:22:01
коллеги, расскажите мне пожалуйста, что за algebraic types, в каких языках они есть и где их реально применяют?
В ML они наверное ещё в 70-х появились. Из относительного мейнстрима они присутствуют в Swift. В котлин вот вроде тоже. Ну и Scala с Rust'ом, да. В C++ их велосипедят через чёрное темплейтное колдунство. В ООП языках их принято велосипедить через наследование. Но в ООП языках в принципе ничего хорошего нет. Применение у них крайне простое: выражать через типы то, для чего в языках без AlgDT применяются костыли по типу interface{} в го. Так с помощью того же обобщённого option в языках достигается null safety, а result является дефолтным способом возвращения ошибки не бросая исключение. Но вообще я говорю тут про тип сумму. Тип произведение и так в гошечке есть (хотя временами анонимных произведений ака кортежей не хватает).

Evgenij
13.10.2018
08:23:25
enum, которого нам часто не хватает - тоже алгебраический тип
Да я копая легаси в 5.2 сильно почувствовал не\а себе это))

Alexander
13.10.2018
08:25:04
в хаскел, зачем в го?
да даже ради банального отказа от использования числовых констант в перечислениях их стоило завести

Daniel
13.10.2018
08:25:38
не уверен, что числовые константы тут помогут

Alexander
13.10.2018
08:25:43
да даже ради банального отказа от использования числовых констант в перечислениях их стоило завести
Сейчас я их в го делаю через структуру с приватным интом и декларацией всех необходимых вариантов этой структуры в том же пакете

Daniel
13.10.2018
08:26:23
а можно - через интерфейс. и то, и то костыль, но интерфейс яснее

Evgenij
13.10.2018
08:27:30
а можно - через интерфейс. и то, и то костыль, но интерфейс яснее
контракт - ко мне уже обращались)))как взять твое но с гарантией что будет работать через Н лет

Alexander
13.10.2018
08:27:36
я в смысле про подобные банальные штуки const ( UserStatusOk = 1, UserStatusPending = 2, UserStatusErr = 3, )

Vyacheslav
13.10.2018
08:28:37
вот iota же есть
угу. и когда пишешь на языках без неё - становится довольно грустно

Alexander
13.10.2018
08:28:53
вот iota же есть
iota генерирует инты, а мне не инты нужны, а Ok, Pending и Err, при чём желательно, чтобы это был отдельный тип UserStatus.

Vadim
13.10.2018
08:31:07
type BracketKind uint8 const ( Unknown BracketKind = iota Round Square Figure ) , не?
Обычно энумы из солидити так и расшифровываем

Daniel
13.10.2018
08:32:07
type BracketKind uint8 const ( Unknown BracketKind = iota Round Square Figure ) , не?
а так нельзя :) iota - только для не нетипизованных констант

Google
Alexander
13.10.2018
08:32:54
type BracketKind uint8 const ( Unknown BracketKind = iota Round Square Figure ) , не?
ну может быть, но тем не менее iota с моей точки зрения является штукой, которой не должно быть статически типизированном в языке в принципе

Daniel
13.10.2018
08:34:30
да ладно. просто инициализатор для констант. мне не нужен, но я видел, что люди пользуют. я, правда, с ним однажды нарвался. но это другая история

Vyacheslav
13.10.2018
08:35:10
как же нельзя? https://play.golang.org/p/XxFa5rXwoGC Или "нельзя" в смысле "приличные люди так не делают"?

Alexander
13.10.2018
08:36:44
вот это точно ужас

Tux
13.10.2018
08:37:20
> константы > в БД

Vyacheslav
13.10.2018
08:37:54
потому что могут :D

Alexander
13.10.2018
10:12:32
Подскажите по поводу "как не надо делать" У меня есть несколько горутин которые читают из канала который я передаю им (канал0) и после обработки складывают данные в канал (канал1) который мы объявили как глобальную переменную пакета на старте программы я запускаю одну горрутину, которая ждет когда в канале1 наберется достаточно данных (счетчик) и записывает эти данные в базу это сильно костыльно, да?(

Daniel
13.10.2018
10:13:49
это нормально

Alexander
13.10.2018
10:13:58
фух

прям груз с плеч)

Daniel
13.10.2018
10:14:09
надо, правда, добавить сброс кеша по таймауту

Alexander
13.10.2018
10:14:17
есть такое

Daniel
13.10.2018
10:14:26
и там уже довольно нетривиально все становится сразу

тогда ок

Alexander
13.10.2018
10:16:10
Спасибо)

Ilya
13.10.2018
10:19:44
подскажите: читаю код реализации функций math и там все функции заданы двумя стркоами например : func Tan(x float64) float64 func tan(x float64) float64 { это как я понимаю чтобы компилятор сначала попытался использовать ассемблерную реализацию? или для чего?

Daniel
13.10.2018
10:20:25
а это где?

Ilya
13.10.2018
10:21:29
https://golang.org/src/math/tan.go?s=2594:2621#L72

для корня квадратного явным образом написано что по возможности надо использовать системную реализацию

Google
Ilya
13.10.2018
10:23:38
но мне тут интереснее сама форма записи - сначала публичная запись но без тела а потом приватная но с телом

Daniel
13.10.2018
10:24:17
это разные функции, одна Tan, другая tan

anatolii
13.10.2018
10:25:02
Почему одна без тела?

Daniel
13.10.2018
10:25:08
там где-то рядом лежат еще платформенно-специфичные файлики, в которых определяется тело для Tan, и дефолтный вариант, в котором она просто зовет tan

Почему одна без тела?
https://stackoverflow.com/questions/14938960/what-does-a-function-without-body-mean\

anatolii
13.10.2018
10:25:59
Спасибо

Artur
13.10.2018
10:31:11
Подскажите, как мжно создать юмьютабельный массив? и можно ли вообще

Alexander
13.10.2018
11:16:03
а как тогда во время инициализации программы быть с горутинами которые читают из этого канала и пишут в базу (они работают не в мейне, а в блоке инит, конфиги считывают и тп)? мне в 10-15 функций придется постоянно пробрасывать указатель на канал, я не считаю это какойто жуткой работой, но это сильно усложняет код, имхо

Даниэль сказал что это нормальная практика =|

на текущий день софт работает нормально, без утечек памяти (+- 1.5 месяца), решил просто подуточнить

до этого я считал это немного грязным решением

Pawel
13.10.2018
11:19:58
нормально имелось ввиду видимо много писателей - один читатель. А каналы в глоб. переменной и init, которая что-то там инициализирует - это пводод для рефакторинга. Вне main не должно быть ни каких изменяемых объектов, это аксиома

Xor
13.10.2018
11:20:25
Глобальна переменная создаёт много проблем при тестировании, при попытках инициализации в другом месте.

Pavel
13.10.2018
11:20:35
Странная аксиома ?

Pavel
13.10.2018
11:20:56
Лучше иметь глобальную переменную и экономить время и на коде и на тестах!

Pawel
13.10.2018
11:21:20
не лучше. глоб. переменные - это зло в чистом виде

Alexander
13.10.2018
11:21:21
Кроме одного единственного места

Google
Alexander
13.10.2018
11:21:58
почему у меня напрашивается сразу вопрос, а зачем придумали зло?(

типа нате переменную, но ее вообще нельзя использовать(

Pavel
13.10.2018
11:22:35
почему?
Время -- деньги, почему ж еще.

eugene
13.10.2018
11:22:44
Pavel
13.10.2018
11:22:51
Почему что?

eugene
13.10.2018
11:23:14
Почему что?
"Время -- деньги" связано с "Лучше иметь глобальную переменную"

Pavel
13.10.2018
11:23:38
"Время -- деньги" связано с "Лучше иметь глобальную переменную"
Там после слова "переменную" есть продолжение.

eugene
13.10.2018
11:24:00
Там после слова "переменную" есть продолжение.
и как вы будете потом отслеживать, где изменяется переменная?

Pavel
13.10.2018
11:24:09
Зачем ее изменять?

Xor
13.10.2018
11:24:17
почему у меня напрашивается сразу вопрос, а зачем придумали зло?(
Подменяемые базовые параметры, глобальные настройки типо time.Local, инициализация ошибок, генерация интстенса для статических методов.

eugene
13.10.2018
11:24:25
Зачем ее изменять?
а зачем вы константу называете переменной?

eugene
13.10.2018
11:24:59
IDE нажимаешь Find usages и все ?
гениально! зачем тогда нужно ООП?

Pavel
13.10.2018
11:25:08
В Go нет ООП

Olzhas
13.10.2018
11:25:11
Pavel
13.10.2018
11:25:12
Если вы забыли ?

Vasiliy
13.10.2018
11:25:30
func BenchmarkStringPlus(b *testing.B) { var name string for i := 0; i < b.N; i++ { name += "value" } }

go 1.11 виснет напрочь )

не знаете почему?

Страница 1549 из 1630