Първо предизвикателство

  1. Ръннах go fmt first.go преди да постна решението, но все още ми показва синтактични грешки когато се опитвам да го постна. Някакви идеи как да го направя да отговаря на стила, който искате.

  2. go fmt first.go 
    

    ще ти върне first.go форматирано на стандартния изход.

    Обикновенно искаш

    go fmt -w first.go 
    

    което ще запише форматирането във файла вместо да го принтира.

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

  3. При мен go fmt -w mapSum.go дава "flag provided but not defined: -w"

    Иначе и при мен променяше файла, доколкото си спомням.

    Както и да е. Въпросът ми е какво точно трябва да изпратим за първото предизвикателство? Само import main и самата функция mapSum или трябва да имаме и други неща от рода на main функция, например. Пратих първия вариант, но не ми се ще после да се окаже, че не съм пратил всичко, което трябва.

  4. За go fmt:

    Ами както по-горе беше коментирано - явно в последните версии go fmt по default променя файла in place.

    Тоест go fmt вътрешно извиква командата gofmt -l -w. Ако ти е интересно ето го help-a с флаговете за командата gofmt

      usage: gofmt [flags] [path ...]
      -cpuprofile="": write cpu profile to this file
      -d=false: display diffs instead of rewriting files
      -e=false: report all errors (not just the first 10 on different lines)
      -l=false: list files whose formatting differs from gofmt's
      -r="": rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
      -s=false: simplify code
      -w=false: write result to (source) file instead of stdout
    

    TL;DR - Когато правиш go fmt не ти трябват флагове. Когато правиш gofmt ти трябва -w.

    За предизвикателството:

    Това, което бяха казали на лекцията (поне по мой спомен) беше:

    Искаме само функцията mapSum, която да връща резултата, а не да го принтира. Няма нужда да пишете функция main и подобни.

    Може и да не са го казали точно така, но поне това аз разбрах. Тоест нещата, които са важни да се отбележат са:

    • трябва да имаме функцията mapSum
    • не трябва да имаме функция main
    • mapSum трябва да връща резултата, а не да го принтира
    • под import main сигурно искаш да кажеш package main, което все пак ти трябва, понеже всичко трябва да е в пакет. Не помня да са казвали изрично пакетът да е main за предизвикателството, но сигурно се подразбира или пък просто не съм обърнал внимание.
    • последната точка мисля, че даже и да искаш няма да ти разрешат да commit-неш нещо без пакет на сайта.

    Също така предизвикателството както виждаш не е трудно и едва ли ще го объркаме - то е просто, за да свикнем с езика, но все пак са дали примерен тест, който можеш да си пуснеш.

    Ако искаш можеш и да си допишеш някакви твои тестове, но поне на мен не ми хрумнаха странни case-ове, където да се чупи нещо. Ако на теб ти хрумне нещо можеш да го споделиш с колегите си тук в темата, за да можем да видим дали нашите имплементации се справят адекватно с него.

  5. Пояснение по package main:

    • не е нужно самото main, ами да е в някой пакет. Моите са в package yas; нуждата е всяко файлче с код да е в package, за подреденост, пък да се импортва лесно и т.н;

    • всъщност при мен компилаторът гърми, когато няма func main във файла след package main;

    Отделно,

    • добра идея е да докоментирате всичко в кода си. Лично все още не знам как се документира Go официално (прочетох някъде, че има официално решение godocs за извличане на документация), но е супер добра практика човек да си оставя подписа на труда!

    Подписвайте се! :squirrel:

  6. ВАЖНО

    Пакета трябва да е main - или по-точно в конкретния случай трябва да е main по-нататък можем да решим че трябва да е baba или dqdo или yas но към момента и ако не кажем нещо изрично е main.

    Причината е че за да можем да ви тестваме кода автоматично(за което ще говорим в по-нататъчни лекции) се налага да знаем какъв пакет ще тестваме, а ние съответно сме писали тестовете за пакета main.

    Отново, можем да решим по-нататък от гледна точка на по-голям реализъм да не е всичко в пакета main, но към момента е така.

    @Ясен Не компилатора гърми, но това отново в по-нататъчна лекция - важното е, че не е компилатора и по-важно не ви трябва да не гърми :).

    Всички домашни и предизвикателства(или поне повечето предизвикателства) имат тестове (част от които са публични тоест като горните) които вие можете(силно препоръчително е) да си ги пускате с командата go test.

    Ако каже

    PASS
    ok      github.com/fmi/go-homework/challenges/01        0.001s
    

    всичко е наред.

    Ако каже нещо като

    FAIL    github.com/fmi/go-homework/challenges/01        0.001s
    

    значи нещо не е наред :) погледнете по-горните редове.

    Но принципната практика(която трябва да сме ви я казали на лекцията но може би не сме) с всичките вариации на темата домашни и предизвикателства е:

    Това съм го писал за Linux/Mac - Windows не съм пипал от ... години

    1. go get -u github.com/fmi/go-homework # взимате си кода за домашните и си го ъпдейтвате
    2. cd $GOPATH/src/github.com/fmi/go-homework # отивате в прокта за домашните
    3. cd path/to/challenge/homework # cd challenges/01/ вслучая
    4. vim solution.go # правите файл с окончание .go solution.go е прекрасно
    5. Четете си условието
    6. пишете код
    7. go test # пускате си теста
    8. Имате грешки - връщате се на точка 5, иначе към точка 9
    9. go fmt # форматирате си кода
    10. Предавате го през сайта

    НЕ commit-вайте нищо в репото ще счупите ъпдейтването и ще трябва да го правите по-ръчно.

    НЕ share-вате решенията си преди крайния срок.

    В ДОПЪЛНЕНИЕ: за предпочитане е да нямате нищо-друго публично в пакета освен това което сме ви казали.

    п.п. Извинявайте за този иначе така дълъг пост, но забелязвам че явно или ние не сме били ясни или изобщо не сме казвали как се предават домашни :). Моля всички да си пуснат тестовете и да си оправят решенията ако имат проблеми(някои имат).

  7. Ами значи ще е добре да го споменете и утре на лекцията live, понеже едва ли всички гледат форумите.

    Аз също оригинално се чудех да питам дали има по-конкретно изискване за името на пакета точно поради леснотата на тестовете, но реших, че ако искате нещо различно от main (например challenges) със сигурност щяхте изрично да го кажете.

    Иначе на други курсове е имало отделен post / readme.md за предаване на домашни, където са описани изискванията.

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