Anonymous
Судя по тому, что у меня возникли сложности, думаю мне надо подумать над логикой моего алгоритма ))
Anonymous
Я так и подозревал, что кастануть не получится, только через switch выбрать нужный тип для каста. Ну либо перебирать через reflect поля ))
Michael
https://blog.golang.org/laws-of-reflection
Anonymous
Anonymous
не судьба ))
Michael
Anonymous
Юзать y как родненький.
Anonymous
Ваще изначально хотел маралить и анмаршалить []interface{}
Michael
ну
Michael
v, ok := .()
Michael
if ok {pew pew}
Anonymous
Циклом перебрать все возможные типы? ))
Michael
если универсально, то reflect
Anonymous
Ладно, однострочником не отделаюсь, спасибо, буду думать дальше.
Alexander
а кто-то может подсказать - в GRPC можно каким-то образом закрыть стрим на сервере и сообщить клиенту почему стрим был зыкрыт ("server shutdown", "banned", "too many requests" - в общем какую-то строку передать)? гугл не помог - сложилось впечатление, что нельзя
Alexander
что-либо вроде CloseFrame-а в вебсокет протоколе, возможно свой подход какой есть
Alexander
наверн через trailing metadata может получиться
Vasily
там есть Shutdown
Vasily
и в этом случае на клиент отправляется сообщение в ошибке что сервер завершается
Alexander
а можно ссылку на описание или код?
Vasily
в случае если был запрос
если нет - просто коннект закрывается и потом клиентом на той сторой переоткрывается
Alexander
аа - нашел - но это шатдаун всего сервера, у меня могут быть разные события
Vasily
https://godoc.org/google.golang.org/grpc#Server.GracefulStop
https://godoc.org/google.golang.org/grpc#Server.Stop
Vasily
а, стрим
Vasily
тогда пожалуй через trailing metadata стоит пробовать
Alexander
попробую, спасибо, там есть еще Details поле у status-а как выяснилось тока что - при создании ошибки - но проставить можно только когда ошибку возвращаешь, а мне еще и на OK надо
Alexander
хотя на ОК - не обязательно в целом
I
Кто-нибудь использует gorm?
I
Когда делаю tx.Delete(&User{}, id) RowsAffected всегда 0, а tx.First(&user, id) возвращает пользователя корректно. Пробовал делать сначала .First а потом указатель на юзера передавать в .Delete(&user) всё-равно не работает
I
Пробовал делать .Unscoped().Delete(&user), .Where("id = ?", id).Delete(&User{})
Slach
Всем привет
а как сделать такую штуку
есть интерфейс
есть две его имплементации
хочу сделать map[string] чтобы в зависимости от string возвращались
вот так не работает в golang слишком строгие типы ;)
var m := map[string]InterfaceType {
"key1": InterfaceImplementationStruct1{},
"key2": InterfaceImplementationStruct2{},
}
неужели надо будет фигачить хелпер функцию в которой switch ?
Slach
ладно Роб, уговорили, сделал через switch ...
Anonymous
Danil
Anonymous
Что-то я совсем запутался. Могу ли я для интерфейса написать метод?
func (m MyInterface) DoSomething()
Вроде ругается invalid receiver type
Alexei
Alexei
или можешь вложенный тип с методом сделать, но там свои правила уже
Alexei
или func DoSome(m MyInterface)
Anonymous
Хех, думал напишу у интерфейса универсальный метод. Придётся реализовывать в каждой реализации интерфейса ((
Alexei
сделай общий тип с методом и вкладывай в каждую реализацию интерфейса
Тик
I
Pawel
Кто нибудь знает чятик по постгресу или по SQL ?
Slach
Pawel
Vladislav
Slach
Вот так должно работать. На что ругалось?
на несоответствие типов
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
@BloodJazMan https://play.golang.org/p/oeO5UG_rLso это не то, что ты хотел?
Nikita
Nikita
I
Nikita
I
орм как оказалось не панацея. Как раз хоть в sql сложные запросы подучу, а то вообще разленился
Nikita
Nikita
I
I
Mike
Возможно у тебя ресиверы были на поинтерах, тогда получается ошибка: cannot use B literal (type 😎 as type A in map value:
B does not implement A (Do method has pointer receiver)
Slach
Michael
Nikita
Slach
угу, еще бы версионность хранимок вменяемо поддерживалась бы...
а то люди всякие ухищрения используют для того чтобы хранимки атомарно обновлять
Michael
там ещё до версионности хранимок куча проблем выстрелит)
I
Можно ли выполнить несколько функций в одном if?
I
с назначением переменных
🏁Александр
сокр. кода до добр. не довед.
I
понял
Alexander
Кто-нибудь кодил на go для гугловского firebase? Есть задача слушать эвенты, оф поддержки в Go-клиенте их нет. Думаю есть ли смысл делать это Go? (альтернатива в виде ноды не очень возбуждает)
Alexander
спасибо. Еще они в своей оф доке советуют старый форк этой либы https://github.com/zabawaba99/firego
Timur
Alexander
но мне не нравятся там ишью трекер и активность последние полгода