
Vasily Romanov
18.01.2018
16:00:30
нет, так не работает
под капотом-то он известен
но когда мы кастуем - мы кастуемв конкретный тип
так что только reflect

Michael
18.01.2018
16:03:19

Google

Andrew
18.01.2018
16:05:42
Сейчас пример накатаю, покажу, что хочу
https://play.golang.org/p/1DvpY8I8PlI
Поправил чуток

Roman
18.01.2018
16:12:40

Andrew
18.01.2018
16:13:13
Их содержимое

Roman
18.01.2018
16:13:51
Так у вас же Value за это отвечает или я чего-то не понимаю.
Может не самое правильное решение, но рабочее
https://play.golang.org/p/Vlj03DJLagl

Andrew
18.01.2018
16:15:29
Ладно, сформулирую тогда так. Мне надо замаршалить []Interface{} в toml. А он мне отвечает "чувак, я умею только структуры маршалить".
Только что обнаружил, что стандартный json маршалит []interface{} без проблем. Дума. тогда вопрос снимаю, косяк в библиотеке toml'а.

Mike
18.01.2018
16:26:56
он и тут тоже

Andrew
18.01.2018
16:28:24
/voteban

Sergey
18.01.2018
16:29:58

Michael
18.01.2018
16:47:51
смотри принт в мейне

Andrew
18.01.2018
16:48:52

Google

Andrew
18.01.2018
16:50:12
Судя по тому, что у меня возникли сложности, думаю мне надо подумать над логикой моего алгоритма ))

Michael
18.01.2018
16:58:33

Andrew
18.01.2018
16:59:32
Я так и подозревал, что кастануть не получится, только через switch выбрать нужный тип для каста. Ну либо перебирать через reflect поля ))

Michael
18.01.2018
17:02:06
https://blog.golang.org/laws-of-reflection

Andrew
18.01.2018
17:03:37
не судьба ))

Michael
18.01.2018
17:04:18

Andrew
18.01.2018
17:04:38
Юзать y как родненький.
Ваще изначально хотел маралить и анмаршалить []interface{}

Michael
18.01.2018
17:05:38
ну
v, ok := .()
if ok {pew pew}

Andrew
18.01.2018
17:06:35
Циклом перебрать все возможные типы? ))

Michael
18.01.2018
17:06:40
если универсально, то reflect

Andrew
18.01.2018
17:07:17
Ладно, однострочником не отделаюсь, спасибо, буду думать дальше.

Alexandr
18.01.2018
18:39:42
а кто-то может подсказать - в GRPC можно каким-то образом закрыть стрим на сервере и сообщить клиенту почему стрим был зыкрыт ("server shutdown", "banned", "too many requests" - в общем какую-то строку передать)? гугл не помог - сложилось впечатление, что нельзя
что-либо вроде CloseFrame-а в вебсокет протоколе, возможно свой подход какой есть
наверн через trailing metadata может получиться

Vasily Romanov
18.01.2018
19:13:42
там есть Shutdown

Google

Vasily Romanov
18.01.2018
19:13:54
и в этом случае на клиент отправляется сообщение в ошибке что сервер завершается

Alexandr
18.01.2018
19:14:10
а можно ссылку на описание или код?

Vasily Romanov
18.01.2018
19:14:32
в случае если был запрос
если нет - просто коннект закрывается и потом клиентом на той сторой переоткрывается

Alexandr
18.01.2018
19:15:22
аа - нашел - но это шатдаун всего сервера, у меня могут быть разные события

Vasily Romanov
18.01.2018
19:15:24
https://godoc.org/google.golang.org/grpc#Server.GracefulStop
https://godoc.org/google.golang.org/grpc#Server.Stop
а, стрим
тогда пожалуй через trailing metadata стоит пробовать

Alexandr
18.01.2018
19:17:17
попробую, спасибо, там есть еще Details поле у status-а как выяснилось тока что - при создании ошибки - но проставить можно только когда ошибку возвращаешь, а мне еще и на OK надо
хотя на ОК - не обязательно в целом

Ilya
19.01.2018
01:23:19
Кто-нибудь использует gorm?
Когда делаю tx.Delete(&User{}, id) RowsAffected всегда 0, а tx.First(&user, id) возвращает пользователя корректно. Пробовал делать сначала .First а потом указатель на юзера передавать в .Delete(&user) всё-равно не работает
Пробовал делать .Unscoped().Delete(&user), .Where("id = ?", id).Delete(&User{})

Slach
19.01.2018
02:25:33
Всем привет
а как сделать такую штуку
есть интерфейс
есть две его имплементации
хочу сделать map[string] чтобы в зависимости от string возвращались
вот так не работает в golang слишком строгие типы ;)
var m := map[string]InterfaceType {
"key1": InterfaceImplementationStruct1{},
"key2": InterfaceImplementationStruct2{},
}
неужели надо будет фигачить хелпер функцию в которой switch ?
ладно Роб, уговорили, сделал через switch ...

Andrew
19.01.2018
03:27:27

Danil
19.01.2018
04:23:12

Andrew
19.01.2018
04:53:50
Что-то я совсем запутался. Могу ли я для интерфейса написать метод?
func (m MyInterface) DoSomething()
Вроде ругается invalid receiver type

Alexei
19.01.2018
04:55:35
или можешь вложенный тип с методом сделать, но там свои правила уже
или func DoSome(m MyInterface)

Google

Andrew
19.01.2018
04:58:01
Хех, думал напишу у интерфейса универсальный метод. Придётся реализовывать в каждой реализации интерфейса ((

Alexei
19.01.2018
05:01:28
сделай общий тип с методом и вкладывай в каждую реализацию интерфейса

Anton
19.01.2018
05:05:10

Ilya
19.01.2018
05:05:53

Pawel
19.01.2018
06:02:44
Кто нибудь знает чятик по постгресу или по SQL ?

Slach
19.01.2018
06:09:30

Pawel
19.01.2018
06:09:53

Vladislav
19.01.2018
06:52:25


Slach
19.01.2018
08:50:29
Вот так должно работать. На что ругалось?
на несоответствие типов
InterfaceImplementationStruct1{}
это структура а не интерфейс
пытался делать
InterfaceImplementationStruct1{}.Interface
так тоже не дает
так что пришлось switch в функцию пихать
получилось как то так
//ReporterInterface common interface for anomaly reporting
type ReporterInterface interface {
ReportAnomaly(
config *cfg.ConfigType,
appID, anomalyName, categoryDimension, categoryValue, metricName, metricValue string,
dateNames []time.Time, tsData []float64, probability float64,
nestedTS map[string]map[string][]float64,
)
}
//Reporter Base structure for inheritance over embedding
type Reporter struct {
ReporterInterface
}
func getReporterByKey(key string) (reporter *Reporter, err error) {
switch key {
case "files":
r := FileReporter{}
return &r.Reporter, nil
case "recast":
r := RecastReporter{}
return &r.Reporter, nil
default:
return nil, fmt.Errorf("invalid reportType key=%s", key)
}
}


Mike
19.01.2018
09:28:26
@BloodJazMan https://play.golang.org/p/oeO5UG_rLso это не то, что ты хотел?

Mykyta
19.01.2018
09:47:38

Ilya
19.01.2018
09:48:17

Mykyta
19.01.2018
09:48:47

Ilya
19.01.2018
09:49:10

Mykyta
19.01.2018
09:49:28

Ilya
19.01.2018
09:49:55
орм как оказалось не панацея. Как раз хоть в sql сложные запросы подучу, а то вообще разленился

Slach
19.01.2018
09:50:06

Mykyta
19.01.2018
09:50:07

Michael
19.01.2018
09:51:05

Mykyta
19.01.2018
09:51:32

Google

Ilya
19.01.2018
09:52:02

Mike
19.01.2018
09:52:16
Возможно у тебя ресиверы были на поинтерах, тогда получается ошибка: cannot use B literal (type ? as type A in map value:
B does not implement A (Do method has pointer receiver)

Mykyta
19.01.2018
09:52:49

Slach
19.01.2018
09:52:58

Michael
19.01.2018
09:53:54

Mykyta
19.01.2018
09:54:21

Slach
19.01.2018
09:55:22
угу, еще бы версионность хранимок вменяемо поддерживалась бы...
а то люди всякие ухищрения используют для того чтобы хранимки атомарно обновлять

Michael
19.01.2018
09:56:15
там ещё до версионности хранимок куча проблем выстрелит)