
Denis
22.05.2018
15:44:23
type Msg = gonats.Msg попробуй так вместо type Msg gonats.Msg сработает, но это странная практика

Eldar
22.05.2018
15:45:15
спасибо, сработало. а почему странная? )

Denis
22.05.2018
15:45:52
ну а в чем смысл? ты же ничего не вынес. ну обновилась библиотека gonuts, и твоя структура тоже обновится
почему сразу не писать gonuts.Msg я пока не понял

Google

Eldar
22.05.2018
15:46:49
в основном проекте не используется либа gonuts

Denis
22.05.2018
15:46:59
тогда уж лучше сделать свою структуру, продублировать поля gonuts.Msg, и потом внутри твоего пакета преобразовываться

Eldar
22.05.2018
15:47:05
она используется в sdk

Denis
22.05.2018
15:47:34

Sergey
22.05.2018
15:48:17

Eldar
22.05.2018
15:48:48
дублирование тащит за собой большую кучу типов…

Denis
22.05.2018
15:49:09
ну свою структуру ты контролируешь. обновилась структура gonuts - ты может быть логику преобразования в gonuts поменял, а в остальном коде все осталось по- прежнему

Sergey
22.05.2018
15:49:38
> контролируешь
до момента, пока всё не сломается (== пока не обновится gonats.Msg)
т.е. ничего не меняется

Denis
22.05.2018
15:50:49
ммм, не совсем понял. смотри, допустим gonuts.Msg это структура в которой есть поле Text
я делаю свою структуру и в ней такое же поле. пишу логику которая из моей структуры просто создает gonuts. везде использую свою, так?

Sergey
22.05.2018
15:51:32

Denis
22.05.2018
15:51:34
теперь gonuts.Msg меняет поле Text на Content. я свою структуру не трогаю, меняю только преобразование(подставляю Text в Content)

Google

Denis
22.05.2018
15:51:58
а если я использую напрямую gonuts то я должен бегать по всему коду и все править

Sergey
22.05.2018
15:52:09

Denis
22.05.2018
15:52:11
?

Sergey
22.05.2018
15:52:26

Denis
22.05.2018
15:52:44
да, но это лучше чем править весь клиентский код

Sergey
22.05.2018
15:52:49
дублирование тащит за собой большую кучу типов…

Eldar
22.05.2018
15:53:21
да, там составные типы

Denis
22.05.2018
15:53:23
так я предложил это вместо var Msg = gonuts.Msg. такой-то подход вообще ничего не дает в целом)

Sergey
22.05.2018
15:53:29

Denis
22.05.2018
15:54:28
ну, в этом конкретном случае это хорошее дублирование, не надо его обижать) а если структура большая и никак ее незадублировать или это слишком сложно, тогда я никаких профитов от var Msg= не вижу

Sergey
22.05.2018
15:55:52
ну как же, очень простой профит, если зафиксировать версию пакета, — не нужно делать бойлерплейт
а если версия обновится, то тут в любом случае проблемы

Denis
22.05.2018
15:56:24
хм, я так и не понял, почему бы просто не использовать везде прямо gonuts.Msg, что дает такое присвоение типа?)

Sergey
22.05.2018
15:58:04
про конвертирование из одного в другое я согласен, так правильнее, и в случае нужды замены gonats на что-лбо другое, сэкономит кучу времени и нервов
нормальным также будет просто сделать враппер:
type CustomMsg struct {
inner gonats.Msg
}
и дописать к нему нужный внешний интерфейс

Denis
22.05.2018
16:02:13
ну да, так тоже ок

stixlink
22.05.2018
16:52:54
коллеги, а есть ли способ как то определить дефолтное возвращаемое значение.
func GetNeedAndCurrentCtr(offerId int) (float32, float32, bool)
для этой функции стандартный ответ есть, и она в своем теле может из разных мест его отправить по условиям
0.0, 0.0, false

Google

stixlink
22.05.2018
16:55:11
можно ли как то засунуть набор значений эти засунуть в переменную или еще как, чтоб не писать в разных местах функции не писать заново этот ответ деволтный

Александр
22.05.2018
16:55:59
https://play.golang.org/p/RpWfkJ_YZZ-

stixlink
22.05.2018
16:56:37

Александр
22.05.2018
16:56:54
это так называемый "тихий возврат" ?

stixlink
22.05.2018
16:56:57
ну подумал может опытные коллеги, что то другое нашли

Александр
22.05.2018
16:57:10
для маленьких функций, что бы не возращать полотно каждый раз

stixlink
22.05.2018
16:57:44

Александр
22.05.2018
16:57:50

stixlink
22.05.2018
16:57:58

Александр
22.05.2018
16:57:59
при пустом return вернутся дефолтные
посмотрите пример на плей

Sergey
22.05.2018
16:58:07

Александр
22.05.2018
16:58:22

Sergey
22.05.2018
16:58:26
?

Александр
22.05.2018
16:58:43
оно хотел избежать тройного ретурна

Sergey
22.05.2018
16:58:50
а, ок
я думал смысл в кастомных дефолтных значениях

Александр
22.05.2018
16:59:11
спасибо!
только вы имейте введу, там ретурт либо ничего либо все
если у вас возращается 1 параметр из трех, вы делаете пустой ретурн и до этого меняете эту переменную

Google

Александр
22.05.2018
16:59:57
anyVar = 2
return
а не
return 2

tsov
22.05.2018
17:38:50
внимание! вопрос знатокам. если одна горутина успешно прочитала из канала и продолжила выполнение на машине M1, означает ли это, что горутина-отправитель тоже продолжает исполняться на машине M2, т.е. не находится в очереди Px? Канал небуферизован.

Artem
22.05.2018
17:49:09
Машине?

Sergey
22.05.2018
17:49:29
го стал эрлангом?

Artem
22.05.2018
17:49:53
Вообще формально нет, шедулер решит сам, мб и не продолжит

tsov
22.05.2018
17:57:57
вопрос в том, обязательно ли условие одновременности попадания обеих горутин в машины, чтобы все случилось?

Admin
ERROR: S client not available

tsov
22.05.2018
17:58:38
или одна из них может слиться в очередь в этот момент?

Sergey
22.05.2018
17:59:06
что такое "машина"?

tsov
22.05.2018
18:00:12
вопрос к тому, что количество операций с каналами может влиять на горутины когда их очень много, операции с каналами будут ждать счастья, пока обе горутины попадут в машины, таким образом, они становятся косвенно связанными

Daniel
22.05.2018
18:05:32
и что же это за "хрень"?

tsov
22.05.2018
18:06:48
ну процесс оси, это не принципиально

Daniel
22.05.2018
18:07:22
процесс оси?

tsov
22.05.2018
18:07:45
я пытаюсь понять, шедулер пбудет их подгадывать вместе на две машины, или по отдельности

Sergey
22.05.2018
18:09:04
скедулер?
он один на программу

Google

Daniel
22.05.2018
18:09:20
шедулер вообще позвовет заблокировавшуюся на канале горутину только после того, как ее можно будет разблокировать

tsov
22.05.2018
18:12:59

Daniel
22.05.2018
18:13:21
никакого того же момента нет, на самом деле
но - да, первая блокируется, приходит вторая, происходит передача данных, разблокируются обе

tsov
22.05.2018
18:14:03
вообще то есть, если есть две машины

Daniel
22.05.2018
18:14:55
опять машины

Sergey
22.05.2018
18:15:04
(кто-нибудь понимает, про какие машины речь?)

Daniel
22.05.2018
18:15:25
если у нас два ядра - у нас могет и правда две горутины исполняться одновременно
но на одном канале - нет, там для того мутексы сделаны
сначала одна, потом вторая

tsov
22.05.2018
18:21:58
допустим первая горутина попала в машину M1 и дошла до чтения из канала и вернулась обоатно в очередь процесса P1.
т.е. заблокировалась
в какой момент она вернется в машину, если вторая горутина попала в машину M2 и дошла до записи в канал
заблокировалась и легла в очередь

Sergey
22.05.2018
18:26:29
подскажи, из какой литературы эти термины машины и процесса?

tsov
22.05.2018
18:26:49
из рантайма

Daniel
22.05.2018
18:27:00
ма-ма
нет там никакой машины

Petr
22.05.2018
18:27:12
https://blog.nindalf.com/posts/how-goroutines-work/

Sergey
22.05.2018
18:27:16