ceiling cat
У тебя именованый return аргумент
ceiling cat
(exists bool)
Niko
ok, спасибо
ceiling cat
Но это странно писать новый метод для проверки вхождения в хеш таблицу
ceiling cat
Моё личное мнение)
denisx
Как объявлены оба PreparedStatement? Похоже, что один тянется из вендоринга, второй из gopath.
и во внутреннем пакете, и во внешнем (где база), объявлено одинакого "github.com/jackc/pgx"
Niko
@AxiS575 я сделал return &exist , а тип возврата указал *bool
denisx
и во внутреннем пакете, и во внешнем (где база), объявлено одинакого "github.com/jackc/pgx"
собсна, фанк такой func Prepare(name string, template string) *pgx.PreparedStatement { var statement, err = dbConnection.Prepare(name, template) if err != nil { panic(err) } return statement }
denisx
и он ошибок не пишет. а когда юзаешь пакет - ошибка что выше 🙁
Мерль
Я понимаю, что это немного не из го мира, но как хотя бы абстрактную фабрику без возвращения интерфейса сделать?
Делаешь две структуры-фабрики После этого, если тебе надо будет абстрагироваться от конкретного типа, ты можешь положить их в переменную типа SomethingFactory Или я тебя неправильно понял?
Мерль
можно просто return, без exists
Как? Не мог бы привести пример?
denisx
Мерль
Абстракция.
А зачем? В чём профит? Ты всегда сможешь "посмотреть" на возвращаемое значение как на интерфейс А вот наоборот сложнее
Dmitry
А зачем? В чём профит? Ты всегда сможешь "посмотреть" на возвращаемое значение как на интерфейс А вот наоборот сложнее
Интерфейс - это сокрытие реализации. Если мне внезапно нужно от конкретной реализации что-то такое, чего нет в интерфейсе, то мой код, скорее всего, протух.
Alexey 〒.
Как? Не мог бы привести пример?
func (t *Test) isInMap(p *string) (exist bool) { myMap := t.getPatterns() _, exists := myMap[p] return } если имя переменной указано в возвращаемых, нет нужды дублировать ее в return
Anonymous
Anonymous
Иначе ругается, что вендоринги не совместимы...
denisx
Накидал пример как у тебя. Похоже, вендоринг должен быть общий для пакетов.
да, это я понял. не понял только, как это сделать 🙂
Anonymous
да, это я понял. не понял только, как это сделать 🙂
Попробуй засунуть свой пакет во внутрь первого.
Мерль
func (t *Test) isInMap(p *string) (exist bool) { myMap := t.getPatterns() _, exists := myMap[p] return } если имя переменной указано в возвращаемых, нет нужды дублировать ее в return
так можно, но вообще именованый return — штука не очень хорошая, кроме случаев с перехватом паник в defer, имхо
Anonymous
да, это я понял. не понял только, как это сделать 🙂
godb/<твой пакет> у меня получилось, оба используют тогда общий вендоринг godb/vendor
Мерль
Интерфейс - это сокрытие реализации. Если мне внезапно нужно от конкретной реализации что-то такое, чего нет в интерфейсе, то мой код, скорее всего, протух.
Ну ради б-га, в функции, работающей с фабриками, принимай интерфейс Factory И опа — у тебя и сокрытие есть, и работать с конкретным типов всегда можно в случае нужды
Niko
В чем здесь проблема? type Test1 struct{ myString string }
Aleksandr
здесь нет проблем
Alexander
мозгом компилируется )
Niko
передаю в метод другой структуры параметр Test1.myString, содержащий строковое значение А у меня ошибка Test1 myString is not string type
Alexander
покажи код
Dmitry
@maximniko предлагаю тебе ещё раз прочитать go tour
Dmitry
покажи код
да видимо он вот так делает someFunc(Test1.myString) не создаёт переменную, а из типа пытается дёргать значение
Niko
я там принимаю s string
Aleksandr
код покажти
Alexander
видимо
Niko
type Pattern struct { number string pattern string } func main() { changer := Pattern{number: "A5555A"} changer.setPattern() types.Ua.IsThisPattern(changer.pattern) fmt.Printf("%v", changer.pattern) } ################## СЮДА ПЕРЕДАЮ type Ua struct { } func (ua *Ua) IsThisPattern(p string) *bool { myMap := ua.patterns() _, exist := myMap[p] return &exist }
Aleksandr
а, нет
Niko
в разных пакетах, что значит "неимпортируемое"? Я же явно передаю параметр строкового типа
Aleksandr
да. воспроизведи на play.golang
Alexander
pattern пустой
Aleksandr
pattern пустой
но он строка
Niko
не пустой
Dmitry
не пустой
а у Pattern случайно нет функции pattern?
Niko
invalid method expression types.Ua.IsThisPattern (needs pointer receiver: (*types.Ua).IsThisPattern) types.Ua.IsThisPattern undefined (type types.Ua has no method IsThisPattern)
Niko
типа не создал types.Ua ???
Dmitry
типа иди читай go tour
Dmitry
вопросы все оттуда
Niko
@Am1rkin там кроме Vertex{1,2} ничего нет по структурам!
Aleksandr
types.Ua.IsThisPattern(changer.pattern) - вот ты юзаешь метод инстанса структуры, но до этого его (инстанс) не создал
Niko
я убрал указатель и имею ошибку в консоли
Niko
not enough arguments in call to method expression types.Ua.IsThisPattern have (string) want (types.Ua, string)
Daniel
коллега
Daniel
какое слово непонятно?
Daniel
совсем-то не надо нас за бесплатного оракула карманного держать
Anonymous
А зачем? В чём профит? Ты всегда сможешь "посмотреть" на возвращаемое значение как на интерфейс А вот наоборот сложнее
Стандартный пример с кофе шопом глянь. Вообще странный вопрос зачем нужны абстракции
Alexander
var aaa = new(Ua) забыл
Niko
я ожидаю строку func (ua Ua) IsThisPattern(p string) *bool { myMap := ua.patterns() _, exist := myMap[p] return &exist } А он хочет строку от типа types.Ua
Daniel
коллега, у него нет фантазии. вообще. что вы ему написали - то он и хочет
Niko
никак преобразовать нельзя, без передачи значения через параметр?
Daniel
что куда преобразовать?
Aleksandr
я ожидаю строку func (ua Ua) IsThisPattern(p string) *bool { myMap := ua.patterns() _, exist := myMap[p] return &exist } А он хочет строку от типа types.Ua
play.golang. третий раз. создай заготовку - тебе допилят до рабочгео состояния. взывать к небесам прекращай
Niko
@zelenin я сам хочу допилить и понять, почему я в методе указываю "ЖДУ СТРОКУ!!!", а метод говорит "НЕЕТ, ТЫ ЖДЕШЬ UA sting!!!"
Niko
я без обрывков писал. Два пакета, один передает свой строковый параметр в метод другого
Niko
@onokonem я не туплю, а имею мало опыта с Go
Daniel
давай без обрывков в playground
Niko
не дам
Aleksandr
я без обрывков писал. Два пакета, один передает свой строковый параметр в метод другого
ок. не хочешь play.golang - заново проходи обучалки по go. серьезно, ты не знаешь как работают структуры и методы.
Anonymous
я без обрывков писал. Два пакета, один передает свой строковый параметр в метод другого
тебе сложно скопипастить свой код в playground? это ж 2 кнопки нажать. а нет, 3 - когда в чат ссылку постить. никто не может тебя понять
Daniel
не дам
тогда не обессудь - я тебя зобаню...
Dmitry
Стандартный пример с кофе шопом глянь. Вообще странный вопрос зачем нужны абстракции
Я так понял, мы не об одном и том же говорили. @twentydraft давай на котиках. У меня есть фабрика котиков, которая возвращает интерфейс Мурчатель. Дальше я работаю с этим мурчателем как с абстрактным котиком, а не с конкретным. Но если мне в структуре конкретного кота нужно поправить ему кишки, то внутри его я работаю с реализацией, а не с Мурчателем, верно? Если так, то это даже обсуждать не стоило, и так всё понятно
Alexander
хорош засорять