Nick
Господа, перевели на проект с легаси, пишу к нему юниттесты с нуля. Вот есть пакет, в нем куча структур описано, конструкторы для них, методы которые с полями структур этих делают выверты, меняют, все такое. У меня table-driven, на входе описываю входные параметры для конструкторов и то что должно получиться на выходе из конструктора, если это методы меняющие значения полей, то описываю начальную структуру до метода, входные параметры для метода, и то как должна структура выглядеть на выходе. Тесты такие пишу впервые, поэтому не знаю - как оно вообще, грамотный это подход или что-то еще есть для тестирования методов? И еще вопрос, вот есть конструктор который использует параметром мою структуру какую-то, чей конструктор я уже оттестил - я же могу ее конструктор в генерации входных данных использовать? Как вы на это сами смотрите?
Nick
Может есть какие-то ультрагодные статейки по тестированию подобных вещей в Go, так подкиньте, будьте добры
Sergius Ofitserov
К вопросу о БД. Нашёл ещё одну занятую книжицу: “cloudera Impala” John Russell.
Zloy-Dobry
Парни я чот падахуел
Zloy-Dobry
подскажите как заставить маршалингнормально хавать даты из jsonов?
Maxim
а что там не так?
Zloy-Dobry
parsing time ""2017-10-27 00:29:15"" as ""2006-01-02T15:04:05Z07:00"": cannot parse " 00:29:15"" as "T"
Zloy-Dobry
Added time.Time `json:"added_at" bson:"added_at" в типе ` added_at: "2017-10-25 18:21:29", в джсоне
Maxim
а чем парсится?
Zloy-Dobry
err := json.Unmarshal(data, &rtj)
Maxim
вопрос интересный...
Maxim
в смысле тип Time не хавает такую строку?
Maxim
надо где-то форматтер подставить
Zloy-Dobry
все как описал выше
Maxim
я не в курсе деталей, но попробуем разбираться логически
Maxim
парсер джсона знает, что у него есть тип Time
Maxim
и некая строка, которую хочется запихать в этот тип
Maxim
у Time есть метод Parse() где два параметра
Maxim
то есть джсонпарсер должен знать про Time и вызывать его парсе с нужным layout
Maxim
а вообще, люди вот так советуют делать type Time struct { time.Time } // returns time.Now() no matter what! func (t *Time) UnmarshalJSON(b []byte) error { // you can now parse b as thoroughly as you want *t = Time{time.Now()} return nil }
Maxim
подобный примерчик https://gist.github.com/maxp/300910ba17386f69a8a4b046dadcb1e8
Zloy-Dobry
чот не особо-то parsing time "2017-10-27 00:29:15" as "2006-01-02T15:04:05.999999999Z0700": cannot parse " 00:29:15" as "T" exit status 1
Zloy-Dobry
t, err = time.Parse("2006-01-02 15:04:05", s) так вышло
Maxim
что вышло?
Maxim
ты почитай, что за параметры у Parse
Maxim
а вообще в Го как-то бредово Time сделан
Maxim
надо быть каким-то альтернативно одаренным, чтобы изобрести такую спецификацию парсинга - https://golang.org/src/time/format.go
Maxim
это из серии "мы пойдем другим путем!"
Zloy-Dobry
и еще первым вариатом получается added_ad: { time: <TIME>} , а хотелось бы added_ad: <TIME>
Maxim
а структуру там как описал?
Maxim
там просто один тип должен быть, без имени переменной
Zloy-Dobry
типа так
Zloy-Dobry
type TimeNormal struct { time.Time }
Maxim
поглядел повнимательнее на формат...
Maxim
но эти придурки не сделали там stdZeroHour !!!???
Maxim
это что у низ вообще в голове-то было...
Kirill
@mpenzin я бы не был столь категоричен в клеянии ярлыков придурки/не придурки, а если уж мозг жмет, то можно реализовать нужный вам функционал и отправить на ревъю
Maxim
а я вот как раз категоричен, особенно когда вижу конкретный разработческий косяк
Maxim
то есть ребята не поленились выдумать свою систему форматирования дат, а не взяли никакую общеизвестную, ну и как водится у американцев, забыли, что есть еще остальной мир, где быват чуть-чуть другие правила.
Kirill
OK, понятно, во всём виноваты американцы
Maxim
И мое личное решение не заниматься прямо сейчас доработкой Go никак не влияет на вышеупомянутый косяк.
Maxim
Вот только не надо приписывать мне того, что я не говорил.
Dmitry
а вообще в Го как-то бредово Time сделан
Вы ещё на api crypto/* посмотрите... ну или на то как внутри сделан http/pprof|pprof При чтении кода иногда возникает ощущение что проектировал студент :)
Maxim
еще не смотрел, но уже буду ожидать
Dmitry
Лично мне сильно не нравится как некоторые вещи в стандартной библиотеке сделаны. Самое забавное что в большинстве случаев поправить это не получится(привет, обратная совместимость). Нужно просто новую либу делать
Maxim
У меня наверно сейчас просто отходняк :) То есть я долго смотрел на Го, как на этакий быстрый и легкий "Питон", но пока не взялся разбираться.
Dmitry
Хз, у меня подобный "отходняк" уже год продолжается. Иногда хочется просто взять, форкнуть некоторые части и перепилить полностью :) Но одного человека для такого движа мало
Maxim
грустно, конечно...
Maxim
день в формате 01 как вывести?
Quet
Day() и форматируй как хочется?
Quet
или 02 в формате
Quet
оратор выше не осилил прочитать документацию по пакету time ждем удивительных историй про стандартную библиотеку
aadz
или 02 в формате
Day() возвращает int. Так что fmt.Printf("%.2d\n", 2) // 02
Quet
Day() возвращает int. Так что fmt.Printf("%.2d\n", 2) // 02
ну да, либо взять инт и форматировать его как душе угодно или 02 в формате
aadz
Наверное, до Gо полезно сперва C посмотреть, чтобы не было вопросов о том, как пользоваться тем же printf или springf, оно из С, по сути
朝の日差し ✙
два чаю этому человеку
aadz
это кому совет? ) или так, просто мысли?
тому, кто int не знает как оформить нужной ширины и дополнить нулями слева. Хотя, конечно, совет бесполезный
Quet
но совет смотреть на си тому кто учит го (и не знает ни го ни си) это вредный совет
aadz
ну... как знать? На самом деле, если не просто смотреть, а и пописать на C, то, вероятно, многих претензий к Go не будет, хотя, может быть, как раз другие появятся :)
朝の日差し ✙
Почему? По сути, го поддерживает процентов 90 (как и прочие 76,18% цифр в иньернете - эта взята с потолка) того, что есть в С
Quet
потому что если человек не знает ни того ни другого то проще уж учить го все то же самое, но тупее и не надо думать про управление памятью
aadz
Но сама идея, что Go это не "быстрый Python" - прекрасна, и, конечно, надо в Go все переделать, чтобы было как в Python :)
Quet
претензии к го обычно у людей которые видели всякие достижения современного языкостроения и откат на 30 лет назад в этом смысле как-то печалит
aadz
И, как мы понимаем, обязательно GIL сделать! Чтобы все было привычно :)
aadz
Может быть, это не откат. Пайк со товарищи все же не впервые за мужем, что касается языков. Вероятно прикинул, как и что, и с его знаниями того, что за все надо чем-то платить, сделал то, что мы имеем. Это еще не язык для работы с квантовыми процессорами, так что +- 30 лет - это ничто :)
Maxim
Забавно тут ребята на Си намекают и на ГИЛ в Питоне :)
Maxim
Нука, знатоки документации, покажите мне, как тут вывести часы с лидирующим нулем? https://golang.org/src/time/format.go
Maxim
при учете, что часов у нас 24
Maxim
слив?
Maxim
ок, засчитан.
Quet
Нука, знатоки документации, покажите мне, как тут вывести часы с лидирующим нулем? https://golang.org/src/time/format.go
слушай, ну вот с днями ты поленился потратить 5 минут и прочитать документацию все же
Quet
не поленись вот сейчас
aadz
иди сам доку читай, специалистом по Go за тебя никто тут становиться не будет
Quet
скала, раст, функциональщина всякая
Quet
имея хороший рантайм и неплохую стандартную библиотеку именно как язык го конечно прошлый век