Публикувано е първото предизвикателство. Ако имате някакви въпроси, тук е мястото.
Първо предизвикателство
Ръннах go fmt first.go преди да постна решението, но все още ми показва синтактични грешки когато се опитвам да го постна. Някакви идеи как да го направя да отговаря на стила, който искате.
go fmt first.go
ще ти върне first.go форматирано на стандартния изход.
Обикновенно искаш
go fmt -w first.go
което ще запише форматирането във файла вместо да го принтира.
п.п. Това ще трябва да го направим малко по ясно за следващия път
@Михаил, версията на Дойчин автоматично прави -w и май всички останаха с впечетлението че така нещата са наред... Най-добре:
gofmt -w *.go
Ъ? :D Аз правя
go fmt
в директорията. Това променя inplace всички файлове в нея.
При мен go fmt -w mapSum.go дава "flag provided but not defined: -w"
Иначе и при мен променяше файла, доколкото си спомням.
Както и да е. Въпросът ми е какво точно трябва да изпратим за първото предизвикателство? Само import main и самата функция mapSum или трябва да имаме и други неща от рода на main функция, например. Пратих първия вариант, но не ми се ще после да се окаже, че не съм пратил всичко, което трябва.
За
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-ове, където да се чупи нещо. Ако на теб ти хрумне нещо можеш да го споделиш с колегите си тук в темата, за да можем да видим дали нашите имплементации се справят адекватно с него.
- трябва да имаме функцията
Пояснение по
package main
:не е нужно самото
main
, ами да е в някой пакет. Моите са вpackage yas
; нуждата е всяко файлче с код да е вpackage
, за подреденост, пък да се импортва лесно и т.н;всъщност при мен компилаторът гърми, когато няма
func main
във файла следpackage main
;
Отделно,
- добра идея е да докоментирате всичко в кода си. Лично все още не знам как се документира Go официално (прочетох някъде, че има официално решение godocs за извличане на документация), но е супер добра практика човек да си оставя подписа на труда!
Подписвайте се!
ВАЖНО
Пакета трябва да е
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 не съм пипал от ... години
- go get -u github.com/fmi/go-homework # взимате си кода за домашните и си го ъпдейтвате
- cd $GOPATH/src/github.com/fmi/go-homework # отивате в прокта за домашните
- cd path/to/challenge/homework # cd challenges/01/ вслучая
- vim solution.go # правите файл с окончание .go solution.go е прекрасно
- Четете си условието
- пишете код
- go test # пускате си теста
- Имате грешки - връщате се на точка 5, иначе към точка 9
- go fmt # форматирате си кода
- Предавате го през сайта
НЕ commit-вайте нищо в репото ще счупите ъпдейтването и ще трябва да го правите по-ръчно.
НЕ share-вате решенията си преди крайния срок.
В ДОПЪЛНЕНИЕ: за предпочитане е да нямате нищо-друго публично в пакета освен това което сме ви казали.
п.п. Извинявайте за този иначе така дълъг пост, но забелязвам че явно или ние не сме били ясни или изобщо не сме казвали как се предават домашни :). Моля всички да си пуснат тестовете и да си оправят решенията ако имат проблеми(някои имат).
Ами значи ще е добре да го споменете и утре на лекцията live, понеже едва ли всички гледат форумите.
Аз също оригинално се чудех да питам дали има по-конкретно изискване за името на пакета точно поради леснотата на тестовете, но реших, че ако искате нещо различно от main (например challenges) със сигурност щяхте изрично да го кажете.
Иначе на други курсове е имало отделен post / readme.md за предаване на домашни, където са описани изискванията.
Трябва да сте влезли в системата, за да може да отговаряте на теми.