
dimcha
25.09.2018
19:38:20
вот код
я выступаю в роли "браузера"

Google

Александр
25.09.2018
19:40:21
так ...
а причем тут unix domain?

dimcha
25.09.2018
19:40:38
пишу тулзу, которая отлавливает эвенты в lxd

Roman
25.09.2018
19:40:55

dimcha
25.09.2018
19:41:29
нет смысла tcp:// использовать

Aleksandr
25.09.2018
19:42:02
демон и домен же разные вещи? ну так, к слову

dimcha
25.09.2018
19:42:28
там придется сертификаты цеплать и пр. геммор

Александр
25.09.2018
19:43:06
гениальное решение коллега

dimcha
25.09.2018
19:43:31
какой клиент? )

Aleksandr
25.09.2018
19:43:36

Google

dimcha
25.09.2018
19:43:45
Сударь, гляньте код выше

Александр
25.09.2018
19:43:56
я глянул

dimcha
25.09.2018
19:44:10
и почитайте про unix sockets

Александр
25.09.2018
19:44:28
вы же понимаете что 20 строчками не обойдетесь?

dimcha
25.09.2018
19:44:40
в коде заменить "unix" на "http" и все
я бегаю по tcp
только вопрос не в этом
а в ожидании данных на Read()

Aleksandr
25.09.2018
19:45:23

dimcha
25.09.2018
19:45:36
где?

Aleksandr
25.09.2018
19:45:49
а как узнать что там 0 байт, не попытавшись вычитать?
у него религиозный вопрос
ему не нравится вечный луп. он хочет чтобы луп продолжился только тоггда, когда на то укажет божественное провидение, знающее что появились байты
нельзя узнать что байт нет не прочитав их

dimcha
25.09.2018
19:46:21
почему религиозный?
можно )))
так select, epoll, kqueue работают )

Aleksandr
25.09.2018
19:46:42
нельзя остановить луп до тезх пор пока не появятся байты, если этого кто-то не прочитал в лупе со стороны

dimcha
25.09.2018
19:46:56
только вот я не знаю, как это протащили в go

Daniel
25.09.2018
19:47:03
да
коллега, у этого Conn Read() вернет n==0 только если произойдет ошибка. например - случится deadline
если он у вас возвращает n==0 - вы что-то не так делаете

Google

dimcha
25.09.2018
19:47:30
вооот.. теперь осталось понять ЧТО

Daniel
25.09.2018
19:47:44
err не проверяете?

dimcha
25.09.2018
19:48:05
проверяю, в коде выше проверяю.
а какой тайный смысл дедлайнов?
может это то, что мне нужно?

Daniel
25.09.2018
19:49:22
коллега, а что вы хотели сказать вот этим? ws.conn.Read(buf[:])
зачем вы передаете в Read новый слайс?

dimcha
25.09.2018
19:49:38
это копипаста )
я из офф примера от гориллы менял

Aleksandr
25.09.2018
19:50:46
а как луп может не остановиться, если n = 0?
https://gist.github.com/kandeshvari/3ff7d5f517d72c0035308b17966d1fa7#file-wsreader-go-L39

dimcha
25.09.2018
19:51:22
https://gist.github.com/kandeshvari/3ff7d5f517d72c0035308b17966d1fa7#file-wsreader-go-L39
вот если сюда ввернуть маленький time.Sleep(), то будет почти то что нужно. Но это неправильный подход

Daniel
25.09.2018
19:51:58
коллега, вы бы разобрались в собственном коде, а?

dimcha
25.09.2018
19:52:06

Eugenii
25.09.2018
19:52:19
ООП и модульность друг другу не помеха
нет конечно. Разделяй и влавствуй, придумали еще римляне
я к тому, что на любом витке спирали, есть идеал к которому общепринято стремиться и который в разной степени не достижим.
но в большинстве случаев, пишут то человеки. я бы даже сказал шалапаи. и пофиг пишут монолит или микросервисы или какие нибудь биологические соты

Daniel
25.09.2018
19:52:46

dimcha
25.09.2018
19:53:04
я что-то не проверяю?

Daniel
25.09.2018
19:53:35
на простой вопрос - зачем вы новый слайс создаете - вы ответить не можете

Google

Daniel
25.09.2018
19:54:14
откуда мне знать, что у вас там еще накручено

Александр
25.09.2018
19:54:25
а Accept там не надо случаем?

Daniel
25.09.2018
19:54:50
Read() у net.Conn блокирующий - это точно.

dimcha
25.09.2018
19:54:52
нет, это к принятию коннекшена относится
тогда значит я совершил невозможное )
если Read() возвращает 0, значит он не ориентируется на данные в потоке, а как-то иначе этот поток обрабатывает
вопрос - как

Александр
25.09.2018
20:05:37
а попробуйте byt, _:= ioutil.ReadAll(conn)

Admin
ERROR: S client not available

dimcha
25.09.2018
20:07:53
не получится. ioutil.ReadAll ждет io.EOF
а в моем случае он не прилетает, т.к. поток не закрывается

Nyan
25.09.2018
20:10:25

Pawel
25.09.2018
20:14:59
почему не нужен?
суть активрекорд - хранить методы работы с БД в самом объекте, полученном из БД. Это противоречит solid, а именно - spr, а потому считается говнокодом. И правильно считается.

Oleg
25.09.2018
20:16:00

Pawel
25.09.2018
20:16:35
кто кроме тебя так считает?
ты хочешь сказать, что совмещать бл и круд в одном месте - это не очевидный антипатерн и допускается иметь разные мнения о таком ?

Zaur
25.09.2018
20:24:34
Если у тебя есть таблица ошибок, в соответствии с которой надо возвращать в апи ошибки, нужно создать пакет со структурами ошибок из таблицы с поддержкой интерфейса error, а саму ошибку в коде оборочивать в соответствующую структуру, с помощью пакета errors добавить весь стэк получившихся ошибок, а потом, при выдаче ответа, проверять через switch соответствие корневой ошибки какой-то структуре, так определять тип ошибки, а стэк ошибок из errors выводить в лог. Это нормальная схема?

Oleg
25.09.2018
20:28:19

Pawel
25.09.2018
20:30:23

Maksim
25.09.2018
20:30:26

Google

Daniel
25.09.2018
20:31:17

Pawel
25.09.2018
20:31:49

Maksim
25.09.2018
20:31:56

Dk
25.09.2018
22:43:02
Я что-то запутался. Можно в Go создать структуру, в ней определить поле и доступ к этому полю осуществлять никак иначе как через методы?
type Person struct {
Login string
password string
Username string
}
Вот допустим. Как мне обезопасить password от прямого вмешательства?

Александр
25.09.2018
22:45:48
(они станут приватными)
и делаешь методы структуры под каждое поле
можешь и имя структуры с маленькой сделать, тогда ее инициализация возможна только через возрат из функции

Fastumkruk ✅
25.09.2018
22:48:21

Александр
25.09.2018
22:48:29
конечно
если что-то начинается с маленькой буквы, это не будет доступно за пределами пакета
будь то название функции, имя типа, структура, имя поля
переменная..

Dk
25.09.2018
22:49:28
Показывает passwor2 же