Трета задача

  1. [02.12] Условието е обновено

    Публикувана е третата задача за домашно. Ще ви е много полезно предварително да прочетете този гайд. Условието, както и малък тест + файл с интерфейсите, могат да бъдат намерени и в github хранилището ни.

    Поради теста идния Вторник и забавянето на задачата крайния срок е до Неделя вечерта.

    Тук можете да ни питате ако има нещо неясно по условието.

  2. ➜ ping domashno
    PING domashno (192.168.32.132) 56(84) bytes of data.
    64 bytes from domashno (192.168.32.132): icmp_seq=1 ttl=64 time=0.924 ms
    64 bytes from domashno (192.168.32.132): icmp_seq=2 ttl=64 time=0.847 ms
    64 bytes from domashno (192.168.32.132): icmp_seq=3 ttl=64 time=0.931 ms
    64 bytes from domashno (192.168.32.132): icmp_seq=4 ttl=64 time=4.45 ms
    
    --- domashno ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3001ms
    rtt min/avg/max/mdev = 0.847/1.789/4.454/1.538 ms
    
  3. Здравейте, докато минавах през условията на задачата ми изникнаха следните питания:

    • трябва ли да имплементираме и LibraryResponse?
    • може ли малко разяснения по следното условие:

    // Когато се е резултат на заявка от тип 2 (Return book) - не е нужно да я закачаме към отговора."

    Кое где да закачаме? Аз го разбирам като "книгата в резултата да е nil", но само мога да предполагам : )

  4. @Даниел

    Трябва да имплементирате LibraryResponse, защото каналът ви с отговори ще трябва да изпраща нещо имплементиращо LibraryResponse.

    Иначе ако става въпрос за LibraryRequest - просто трябва да можете да работите с него.

    За коментара си прав - идеята е, че не е нужно да закачате книгата към отговора, няма да се проверява, не ни трябва нейната информация. Може и да го направите (няма да гледаме дали е nil или не е nil).

  5. Няколко пъти опитвам да си кача задачата, но ми дава:

    Намерихме няколко грешки. Погледнете и пробвайте пак:
    ...go code...
    имате синтактична грешка
    

    Каква може да е причината след като съм минал през go fmt,
    програмата си върви, а минава и примерните тестове?
    (И сигурно ли е, че полето за код тук приема и кирилица?)

  6. За кирилица - да, приема.

    Да нямаш функция main случайно?

    Ако имаш възможност ела с лаптоп утре да погледнем какво се случва. Предни години имаше проблем свързан с evans, възможно е да се е появил пак.

  7. Тестове

    Писал съм TD с тях, тъй че който иска може да пробва.
    Пускате само първия тест, пишете код колкото да мине, после пускате първите два, пак пишете,
    после първите три и тъй-нататък : )

    П.С.: Как се процедира когато искаме да имаме и Example, и други тестове (например, тук последният не е удачен за Example тест)? В отделни файлчета ли ги слагаме, или заедно?

    П.С.2: Добавих частично тестване за thread safety, само че трябва да си пуснете тестовете с
    go test -race

  8. В началото на условието имаме:

    AddBookJSON(data []byte) (int, error)
    AddBookXML(data []byte) (int, error)
    

    А по-долу в секция "Добавяне на книги" имаме

    AddBookJSON(data string) (int, error)
    AddBookXML(data string) (int, error)
    

    Има разминаване на типовете, предполагам сте имали в предвид аргументите да са тип string?

  9. @Антоан - имало се е впредвид []byte-ове. Навярно е останало от предишна итерация на условието - ще бъде поправено.

    Повторение на промяната от 02.12: интерфейсите в този файл са верни и очакваме да бъдат копирани вътре във вашето решение преди да го предадете.

    @Станислав - принципно шанс има но ни трябва и причина и към момента такава не е била представена.

  10. Имам въпрос относно заявките. Направил съм следното: създал съм си типове Request и Response, които имплементират съответно LybraryRequest и LibraryResponse. Във функцията GetBook трябва да достъпя книга от библиотеката(по нейния isbn), но няма как да го направя, тъй като GetBook е метод на Response типа ми. Опитах да сложа библиотека като параметър в Response, no Library е интерфейс и реално, не може да достъпи до полетата на моя тип(който имплементира Library). Обмислях и друг вид подход, но не стигнах по-далеч ...

  11. @Даниел: Извинявай за много закъснелия отговор:

    1. Това явно не сме го обяснили, но Example тестовете са документация и тестове, но са повече първото(второто е бонус). Както предполагам си забелязал, трудно се пише нещо което не е тривиално и трудно се проверяват неща различни от това дали нещо се принтира. Съответно според мен всичките ти тестове трябва да не са Example такива. Единствената причина тестовете които ние даваме като примерни да са example(освен за тавтология) е че принципно се разбират по-лесно, когато са малки. Тази няма да е така от следващата задача, защото сме ви предали как се ползва testing библиотеката вече.
    2. Оставил съм забележки в самия gist по тестовете.
    3. Бих предпочел да се дават линкове към конкретна версия на gist. Това е с цел като го одобрим, ти да можеш да продължиш да си бърникаш по-него, но да не се окаже че си добавил тест който е твърде строг или направо грешен, но твоето решение го минава.
    4. Принципно няма проблем да смесваш Example и не Example тестове, но в стандартната библиотека винаги са си в отделен файл (example_test.go). Това навярно е така защото, отново. идеята им е повече документация и тестването е с цел документацията да е по-добра (и валидна) отколкото нещо друго.
  12. @Станислав: първо това е имплементационен въпрос - и принципно не отговаряме на такива. Ако си предадеш решението и там питаш въпроси - имаш шанс да ти помогнем, но определено няма да го обсъждаме публично преди крайния срок на задачата

  13. При опит за взимане на книга, която въобще не е добавяна в библиотеката, "няма наличност" или "непозната книга" трябва да върнем?

    ПС. А пропуснал съм, че сте го написали в "При запитване за информация (наличност) или опит за взимане на книга, която не е била добавена нито веднъж в библиотеката:"

Трябва да сте влезли в системата, за да може да отговаряте на теми.