tracks/go/exercises/series/README.md in trackler-2.2.1.26 vs tracks/go/exercises/series/README.md in trackler-2.2.1.27

- old
+ new

@@ -18,9 +18,53 @@ whatever you get. Note that these series are only required to occupy *adjacent positions* in the input; the digits need not be *numerically consecutive*. +## Implementation + +Define two functions: (Two? Yes, sometimes we ask more out of Go.) + +All returns a list of all substrings of s with length n. + +`All(n int, s string) []string` + +UnsafeFirst returns the first substring of s with length n. + +`UnsafeFirst(n int, s string) string` + +At this point you could consider this exercise complete and move on. + +But wait, maybe you ask a reasonable question: Why is the function +called **Unsafe** First? If you are interested, read on for a bonus +exercise. + +### Bonus exercise: + +Once you get `go test` passing, try `go test -tags asktoomuch`. This +uses a *build tag* to enable a test that wasn't enabled before. Build +tags allow for the selection of files to be used by the package. In +our case it will control which test files are used. You can read more +about those at +[the Go documentation](https://golang.org/pkg/go/build/#hdr-Build_Constraints). + +You may notice that you can't make this *asktoomuch* test happy. We +need a way to signal that in some cases you can't take the first N +characters of the string. UnsafeFirst can't do that since it only +returns a string. + +To fix that, let's add another return value to the function. Define + +`First(int, string) (first string, ok bool)` + +and test with `go test -tags first`. + +The `ok bool` second return argument is a common and idiomatic pattern +in Go. For example you see it in +[Map lookups](https://blog.golang.org/go-maps-in-action) and +[type assertions](https://tour.golang.org/methods/15). + + ## Running the tests To run the tests run the command `go test` from within the exercise directory. If the test suite contains benchmarks, you can run these with the `-bench`