
Александр
30.03.2018
13:54:53
логика то в основном на ней
она конечно обернута в обертку, но по факту
rows, err := removeDbConnect.GetAnyRows()
if len(rows) == 0 {
removeDbConnect.AnyAction()
}

Daniel
30.03.2018
13:56:56
если юнит-тест нельзя написать - его не надо писать

Google

Daniel
30.03.2018
13:57:09
дест с реальной базой - это интеграциолнный, не юнит

Александр
30.03.2018
13:57:23
ну можно замокать всю обертку
только что это даст не понятно ?

Daniel
30.03.2018
13:57:37
если это можно сделать - это нужно сделать

Александр
30.03.2018
13:57:52
а простите что я проверю? как IF корректно работают?
на статическом состоянии то

Daniel
30.03.2018
13:58:22
важно, чтобы код мока не был сложнее кода запроса

Alexey
30.03.2018
13:58:27
Я бы интеграционные делал, и не парился, если логики в функциях мало. А если много - то там уже базу мокать.

Александр
30.03.2018
13:58:57
много-мало это оценочно
вообще это код управления кластером, не понятно стоит его тестить или нет. Без развернутой инфраструктуры он не функционален
просто три-пять IF
которые на любой чих пых валят фатал/панику
*инфраструктуры ?

Google

Alexey
30.03.2018
14:01:00
я не уверен, что правильно валить фатал и панику внутри функций, которые не main()

Александр
30.03.2018
14:01:24
кто сказал что это не внутри main? ?

Alexey
30.03.2018
14:01:36
main() можно не тестировать:)

Александр
30.03.2018
14:01:42
отдельным бинарем вынесено, консольная тулза по управлению зоопарком
"добавить зебр" "выпустить львов" ?
IF !все зебры сожраны { log.Fatal("Ой что-то не так") }

tsov
30.03.2018
14:49:25

Айбелив
30.03.2018
14:52:15

tsov
30.03.2018
15:01:16
берем дизассемблер и спотрим на скомпиленные наследованные классы. удивляемся, что там встраивание

m
30.03.2018
16:10:43

Daniel
30.03.2018
16:49:32
погоди
зачем в пул класть канал? его же нельзя переиспользовать

Phil
30.03.2018
17:04:50
Смотрите. У меня файлики заливаются через rsync. Потом я откидываю в сторону в архив и обрабатываю. Что-то я не соображу, как перекинуть файл, когда rsync уже залил его. ну какой-нибудь flock и... и что?

Daniel
30.03.2018
17:09:01
а рсинк же льет во временный, а потом переименовывает
как файл появился - так он и готов

Phil
30.03.2018
17:10:19
А ой
Я делаю совершенно линейные задачи в go, потому что компиляция, сериализация и удобные либы для xml/json

Alexey
30.03.2018
17:30:38
Главное, временный файл не подхватить:)

yuriy
30.03.2018
18:54:13

Roman
30.03.2018
19:44:55
возвращать unexported типы из exported функции норм вообще?

Google

Dmitry
30.03.2018
19:45:08
Да

none
30.03.2018
19:45:39
подскажите нормально ли юзать go build -ldflags "-s -w" main.go для уменьшения бинарника и после сжать upx ?

Alexey
30.03.2018
19:46:30

Roman
30.03.2018
19:46:55
я спрашиваю потому-что golint на это ругается:
headedServer.go:75:44: exported method SessionRegistry returns unexported type *webwire.sessionRegistry, which can be annoying to use
я это делаю намерено, не должно быть у пользователя библиотеки возможности создать instance типа SessionRegistry, но у того инстанса который я возвращаю пользователю есть exported methods которые могут быть полезны

Alexey
30.03.2018
19:48:46
зачем?!
Чтобы никто не догадался:)
А по хорошему лучше интерфейс экспортед возвращать. Наверно.

Roman
30.03.2018
19:49:55
я конечно могу превратить SessionRegistry в exported, но это как то будет неправильно ибо он по сути пользователю не нужен и зачем засорять API нерелевантными типами
однако проблемно может быть такое:
var registry *webwire.SessionRegistry
registry = server.SessionRegistry()
это нескомпилится, ибо тип не exported
возвращать interface{} не вижу смысла.. ибо для использования нужно его будет превратить в тип *sessionRegistry а он не exported, т.е. exported методами даже не воспользуешься

Alexey
30.03.2018
19:53:51

Roman
30.03.2018
19:54:11

Roman
30.03.2018
19:54:29
хммм
можно и так, да

Alexey
30.03.2018
19:54:53
Внутрь не залезет, а что надо - запустит. И внутри всегда можно будет подкрутить что надо на стороне либы.

Roman
30.03.2018
19:57:07
да, верно
так и сделаю, мерси!

Marlik
30.03.2018
20:18:34
TELETYPE в Атоме кто-нить юзал?

Dmitry
30.03.2018
20:25:53
Интерфейсы возвращать не по гошному
Конструкторы всегда должны возвращать указатель. Если линтер ругается, то это косяк линтера. Подход с неэкспортируемыми объектами довольно распространенный.

Google

Daniel
30.03.2018
21:16:38
а?!
почему конструкторы должны возвращать указатель?
чтобы что?

Dmitry
30.03.2018
21:18:19
Потому что Го спроектирован таким

Admin
ERROR: S client not available

Daniel
30.03.2018
21:18:32
нельзя ли поподробнее

Dmitry
30.03.2018
21:18:34
Интерфейс должен определяться по месту требования,

Daniel
30.03.2018
21:18:44
и?

Dmitry
30.03.2018
21:18:50
А не там, где объект создаётся

Daniel
30.03.2018
21:18:50
указатель-то при чем?

Dmitry
30.03.2018
21:19:18
А, ну можно и просто объект вернуть, но никак не интерфейс

Daniel
30.03.2018
21:19:44
тем не менее - некторые стандарные либы возвращают именно интерфейсы

Dmitry
30.03.2018
21:20:47
Стандартная либа вообще не всегда идеал. Любопытства ради можно пример?

Daniel
30.03.2018
21:21:59
error - это интерфейс :)
в io много что возвращает интерфейсы

Dmitry
30.03.2018
21:22:48
Мы же про конструкторы вроде говорили

yuriy
30.03.2018
21:23:10
Наверное имеется в виду interface абстрактный
Потому что если ты передашь структуру как интерфейс то логично что интерфейс и вернется

Daniel
30.03.2018
21:26:25
https://golang.org/pkg/math/rand/#NewSource
много где, я сейчас и не упомню.

Google

Daniel
30.03.2018
21:27:43
никакого табу на возврат интерфейса нет

Dmitry
30.03.2018
21:32:41
Табу нет. Но идеоматически интерфейс должен быть на принимающей стороне
А не на создающей

Daniel
30.03.2018
21:34:05
а на создающей - структура без экспортируемых поле, котрая технически от интерфейса не отличается
так?

Dmitry
30.03.2018
21:34:52
Технически очень сильно отличается

Daniel
30.03.2018
21:35:05
и чем же?
если в реализацию не лезть

Dmitry
30.03.2018
21:35:59
Интерфейс - это просто контракт, объект может быть любым, если подходит под контракт

Daniel
30.03.2018
21:37:36
Спасибо, кэп
На самом деле - разница есть, и связана она с тем, что в go типизованный nil

Dmitry
30.03.2018
21:40:59
Который выйдет хз когда

Roman
30.03.2018
21:41:44
можно как-то получить ID выполняющей горутины? (для дебагинга)

Sparrow
30.03.2018
21:42:58
ру_девопс ?