
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

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

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

?
13.10.2018
08:21:13

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

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,
)

?
13.10.2018
08:27:55

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

Daniel
13.10.2018
08:28:40

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

Vyacheslav
13.10.2018
08:29:54

Vadim
13.10.2018
08:31:07

Daniel
13.10.2018
08:32:07

Google

Alexander
13.10.2018
08:32:54

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
Подскажите, как мжно создать юмьютабельный массив? и можно ли вообще

Ilya
13.10.2018
10:32:22

Xor
13.10.2018
11:13:32


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
Странная аксиома ?

Alexander
13.10.2018
11:20:48

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
почему у меня напрашивается сразу вопрос, а зачем придумали зло?(
типа нате переменную, но ее вообще нельзя использовать(

eugene
13.10.2018
11:22:21

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

eugene
13.10.2018
11:24:25

Pavel
13.10.2018
11:24:37

eugene
13.10.2018
11:24:59

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 виснет напрочь )
не знаете почему?