Size: a a a

2020 February 21

а

а кто это in Go-go!
rust_help -> rustgohelp
источник

а

а это кто in Go-go!
а кто это
rust_help -> rustgohelp
угу
источник

а

а это кто in Go-go!
Не всё ж хейтить вас :)
источник

RS

Roman Sharkov in Go-go!
Roman Sharkov
как вы относитесь к определению интерфейса на стороне provider’а?

интерфейс у меня в главном пакете: https://github.com/romshark/eventlog/blob/master/eventlog/eventlog.go#L14

а имплементации в под-пакетах: https://github.com/romshark/eventlog/tree/master/eventlog

часто слышу что это антипаттерн и частично согласен, ведь интерфейс должен определяться на стороне потребителя а не на стороне производителя. Но в данном случае мне почему-то кажется оправданым данный подход
источник

Y

YWNWA in Go-go!
там куча полей)
источник

а

а кто это in Go-go!
YWNWA
там куча полей)
вам  там конструктор дан вообще-то
источник

а

а кто это in Go-go!
ему нужен только io.Reader
источник

Y

YWNWA in Go-go!
type Reader struct {
buf          []byte
rd           io.Reader // reader provided by the client
r, w         int       // buf read and write positions
err          error
lastByte     int // last byte read for UnreadByte; -1 means invalid
lastRuneSize int // size of last rune read for UnreadRune; -1 means invalid
}
источник

а

а кто это in Go-go!
а кто это
вам  там конструктор дан вообще-то
источник

а

а кто это in Go-go!
YWNWA
type Reader struct {
buf          []byte
rd           io.Reader // reader provided by the client
r, w         int       // buf read and write positions
err          error
lastByte     int // last byte read for UnreadByte; -1 means invalid
lastRuneSize int // size of last rune read for UnreadRune; -1 means invalid
}
они все приватные
источник

AK

Anton Kucherov in Go-go!
Roman Sharkov
как вы относитесь к определению интерфейса на стороне provider’а?

интерфейс у меня в главном пакете: https://github.com/romshark/eventlog/blob/master/eventlog/eventlog.go#L14

а имплементации в под-пакетах: https://github.com/romshark/eventlog/tree/master/eventlog

часто слышу что это антипаттерн и частично согласен, ведь интерфейс должен определяться на стороне потребителя а не на стороне производителя. Но в данном случае мне почему-то кажется оправданым данный подход
IMHO по сути у интерфейсов есть 2 назначения:
1) Избавится от внешней зависимости, потребителем которой мы являемся (Определяем интерфейс на стороне потребителя).
2) Предоставить другим потребителям возможность изменить часть поведения нашего пакета (Определяем интерфейс у себя в пакете, и дефолтную реализацию рядом).
источник

DG

Dmitry Gagarin in Go-go!
Всем привет.
Только начал знакомиться с Go и появилось пару вопросов, для которых, ответа нагуглить пока не удалось...
1. У gin есть возможность пройти циклом по параметрам из роута (range c.Params), есть ли подобная возможность для обхода query-параметров?
2. Есть ли возможность присвоить значение полю структуры, имея имя поля в переменной, т.е. что-то вроде:
fieldName := "myName"
structure[fieldName] = "text"
или это возможно сделать только через рефлекссию reflect.ValueOf(structure).FieldByName(fieldName).SetString("text")
источник

RS

Roman Sharkov in Go-go!
Anton Kucherov
IMHO по сути у интерфейсов есть 2 назначения:
1) Избавится от внешней зависимости, потребителем которой мы являемся (Определяем интерфейс на стороне потребителя).
2) Предоставить другим потребителям возможность изменить часть поведения нашего пакета (Определяем интерфейс у себя в пакете, и дефолтную реализацию рядом).
а если мы предоставляем некий API к которому прикладываем несколько имплементаций? это числится ко второму кейсу по твоему мнению?
источник

RS

Roman Sharkov in Go-go!
Dmitry Gagarin
Всем привет.
Только начал знакомиться с Go и появилось пару вопросов, для которых, ответа нагуглить пока не удалось...
1. У gin есть возможность пройти циклом по параметрам из роута (range c.Params), есть ли подобная возможность для обхода query-параметров?
2. Есть ли возможность присвоить значение полю структуры, имея имя поля в переменной, т.е. что-то вроде:
fieldName := "myName"
structure[fieldName] = "text"
или это возможно сделать только через рефлекссию reflect.ValueOf(structure).FieldByName(fieldName).SetString("text")
> 2. Есть ли возможность присвоить значение полю структуры, имея имя поля в переменной, т.е. что-то вроде:
> fieldName := "myName"
> structure[fieldName] = "text"

нет. Но можно:

switch fieldName {
case ‘foo’:
 s.Foo = v
case ‘bar’:
 s.Bar = v
}
источник

AK

Anton Kucherov in Go-go!
Roman Sharkov
а если мы предоставляем некий API к которому прикладываем несколько имплементаций? это числится ко второму кейсу по твоему мнению?
Ну по сути ты ведь даешь клиентам точки расширения (ну или возможность выбора из нескольких вариантов или полной замены какой то части твоего кода). Думаю да, ко второму.
источник

RS

Roman Sharkov in Go-go!
Dmitry Gagarin
Всем привет.
Только начал знакомиться с Go и появилось пару вопросов, для которых, ответа нагуглить пока не удалось...
1. У gin есть возможность пройти циклом по параметрам из роута (range c.Params), есть ли подобная возможность для обхода query-параметров?
2. Есть ли возможность присвоить значение полю структуры, имея имя поля в переменной, т.е. что-то вроде:
fieldName := "myName"
structure[fieldName] = "text"
или это возможно сделать только через рефлекссию reflect.ValueOf(structure).FieldByName(fieldName).SetString("text")
> или это возможно сделать только через рефлекссию

рефлексией стоит пользоваться только в самых крайних случаях, её скорее стоит избегать по многочисленным причинам (производительность, усложнение кода)
источник

RS

Roman Sharkov in Go-go!
Anton Kucherov
Ну по сути ты ведь даешь клиентам точки расширения (ну или возможность выбора из нескольких вариантов или полной замены какой то части твоего кода). Думаю да, ко второму.
✌️🏻
источник

DG

Dmitry Gagarin in Go-go!
Roman Sharkov
> или это возможно сделать только через рефлекссию

рефлексией стоит пользоваться только в самых крайних случаях, её скорее стоит избегать по многочисленным причинам (производительность, усложнение кода)
Понял, благодарю. Т.е. если у структуры пару десятков полей и нужно обновлять произвольные, значения которых будут браться из входящих данных, например json, то вполне нормально писать длиный switch с перечислением каждого поля, а не пытаться искать методов обновления полей в неком цикле с проверкой типа и т.д.?
источник

RS

Roman Sharkov in Go-go!
Dmitry Gagarin
Понял, благодарю. Т.е. если у структуры пару десятков полей и нужно обновлять произвольные, значения которых будут браться из входящих данных, например json, то вполне нормально писать длиный switch с перечислением каждого поля, а не пытаться искать методов обновления полей в неком цикле с проверкой типа и т.д.?
у меня такое ощущение что что-то вы делаете не так
источник

RS

Roman Sharkov in Go-go!
Dmitry Gagarin
Понял, благодарю. Т.е. если у структуры пару десятков полей и нужно обновлять произвольные, значения которых будут браться из входящих данных, например json, то вполне нормально писать длиный switch с перечислением каждого поля, а не пытаться искать методов обновления полей в неком цикле с проверкой типа и т.д.?
> а не пытаться искать методов обновления полей в неком цикле с проверкой типа и т.д.?

вот так точно не надо!
источник