Мерль
Niko
как в моем примере.
1. Имею строку с названием структуры test := "Test"
2. Создаю структуру с названием, которое содержится в строке
test{number}
или
(new test())
Dmitry
Niko
ага, нужна фабрика
Vasily
Так нельзя
Vasily
Это не пхп
Dmitry
Niko
ok. Пошел делать switch
Dmitry
func BuildObject(name string) IObject {
switch name {
case "Apple" : return &Apple{}
case "Banana": return &Banana{}
}
return nil
}
Dmitry
типа того
Niko
@Am1rkin спасибо
Dmitry
@Am1rkin спасибо
скорей всего тебе это не нужно,
ты пытаешься понимание других языков перенести в Го,
не надо так ☝️
ceiling cat
Разве нельзя эту задачу с помощью интерфейсов сделать? без switch/case?
Dmitry
Niko
Я действительно переношу код из пхп
Может и можно, но я пока не знаю как правильно писать на го
Мерль
Niko
Я прошел
Niko
Стало проще)
Dmitry
кстати, вот тут поясняется, что возвращать интерфейсы это плохо
https://github.com/golang/go/wiki/CodeReviewComments#interfaces
Vladimir
конечно плохо )
Vladimir
а кто-то говорит что хорошо?
Anatoly
https://github.com/golang/go/wiki/CodeReviewComments #mustread
Valentin
А почему плохо, если конструктор вернет интерфейс? Так компилятор и IDE проверяют, что структура реализует интерфейс верно
Мерль
⏺ Vаdim
как присвоить string через рефлексию значению типа nullString?
If structValue.Type().String() == "sql.NullString" {
structValue.SetString(valueString) /// Так не получается
return nil
}
⏺ Vаdim
Anonymous
Anonymous
как к примеру в джава мире. Правильнее вернуть Map. Вместо HashMap
Igor
Плохо потом мокать и тестировать, но хорошо для драйверов, разных логгеров, и т.п. - всему своё место
Igor
Ну и это специфично для котрибуции в либы компилятора 🙂
engelbart
Что то я не допонимю с vendor папкой
Мерль
как к примеру в джава мире. Правильнее вернуть Map. Вместо HashMap
Если ты захочешь расширить возвращаемый тип, то в случае интерфейса тебе придётся делать чёртову кучу работы, а в случае конкретной структуры — всего лишь добавить методов в её определении. К тому же, ты всегда можешь привести тип к интерфейсу, а вот вытащить тип из интерфейса — довольно геморройная задача
engelbart
Наличие пакета в vendor, избавляет меня от необходимости иметь либу в GOPATH/src или нет?
Niko
Как проверить, если ли элемент в карте???
type Test struct {
}
func (t *Test) isInMap(p *string) (int, bool) {
return t.getMaps()[p]
}
func (t *Test) getMaps() map[string]int {
return map[string]int{
"TEST": 0,
}
}
Constantine️
ok тебе в дорогу ))
Мерль
Dmitry
Niko
мне не нужен elem, а просто проверить есть ли ключ в карте на bool
Dmitry
Dmitry
Niko
Нельзя ли вернуть из метода _, exists := yourMap[key]???
Ведь в exist уже нужный мне bool, зачем делать потом if
Мерль
Anton
Разве не наоборот ?
блин, в summary написано так как я написал (вроде даже оттуда дергнул)
http://blog.kamkor.me/Covariance-And-Contravariance-In-Scala/
Anonymous
denisx
ребята привет
denisx
нуб-вопросы можно?
Dmitry
Anonymous
Anonymous
Anonymous
denisx
вроде да
Dmitry
вроде да
теперь effective go пройди:)
denisx
ахаха )
Anonymous
Давай свои вопросы
Мерль
Ну эт видимо проблема в го такая
ну, если у тебя есть пять имплементаций интерфейса, и если ты меняешь интерфейс, то тебе придётся менять все свои имплементации и в жабке тоже, нет?
Anonymous
denisx
у меня в одном пакете создаётся коннект к базе. а в другом пакете я делаю pgx.PreparedStatement.
Niko
@twentydraft
func (t *Test) isInMap(p *string) (exist bool) {
myMap := t.getMap()
return _, exist := myMap[p]
}
говорит, что myMap[p] evaluated but not used
denisx
так вот из того, с базой, не могу вытащить эти PreparedStatement, пишет Cannot use godb.Prepare("GetPageByURI", getPageByURI) (type *pgx.PreparedStatement) as type *pgx.PreparedStatement in assignment
Anatoly
Niko
ща
Мерль
Niko
я там по ссылке значение передал. сейчас еще пробую
Anonymous
denisx
Anonymous
Ага, что-то с вендорингом...
denisx
пробовал наоборот, но тут go не дает, говорит залезать в вендоры пакетов нельзя
Niko
@twentydraft
Reports assignment with no new valiables on left side
подчеркивает мои _, exist в строке _, exist := myMap[p]
Dmitry
Niko
@Am1rkin Получилось, но где он был объявлен?