From 5c1364e181dd737f6830382fe203241295e0c344 Mon Sep 17 00:00:00 2001 From: Inanc Gumus Date: Fri, 17 May 2019 11:14:54 +0300 Subject: [PATCH] add: an exercise to error handling --- .../exercises/01-refactor/main.go | 33 +++++++++++++++++++ .../exercises/01-refactor/solution/main.go | 28 ++++++++++++++++ 28-error-handling/exercises/README.md | 11 +++++++ internal/magic/detect.go | 3 +- 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 28-error-handling/exercises/01-refactor/main.go create mode 100644 28-error-handling/exercises/01-refactor/solution/main.go create mode 100644 28-error-handling/exercises/README.md diff --git a/28-error-handling/exercises/01-refactor/main.go b/28-error-handling/exercises/01-refactor/main.go new file mode 100644 index 0000000..414e36c --- /dev/null +++ b/28-error-handling/exercises/01-refactor/main.go @@ -0,0 +1,33 @@ +package main + +import "fmt" + +// --------------------------------------------------------- +// EXERCISE: Refactor +// +// In the headerOf function, instead of using a switch, +// use a map. Declare it at the package-level. +// +// RESTRICTION +// +// For panicking, use a deferred function and a named param. +// +// EXPECTED OUTPUT +// +// Please run the solution. +// +// --------------------------------------------------------- + +func main() { + fmt.Println(headerOf("gif")) +} + +func headerOf(format string) string { + switch format { + case "png": + return "\x89PNG\r\n\x1a\n" + case "jpg": + return "\xff\xd8\xff" + } + panic("unknown format: " + format) +} diff --git a/28-error-handling/exercises/01-refactor/solution/main.go b/28-error-handling/exercises/01-refactor/solution/main.go new file mode 100644 index 0000000..1eb86b5 --- /dev/null +++ b/28-error-handling/exercises/01-refactor/solution/main.go @@ -0,0 +1,28 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import "fmt" + +func main() { + fmt.Println(headerOf("gif")) +} + +var headers = map[string]string{ + "png": "\x89PNG\r\n\x1a\n", + "jpg": "\xff\xd8\xff", +} + +func headerOf(format string) (header string) { + defer func() { + if header == "" { + panic("unknown format: " + format) + } + }() + return headers[format] +} diff --git a/28-error-handling/exercises/README.md b/28-error-handling/exercises/README.md new file mode 100644 index 0000000..64af717 --- /dev/null +++ b/28-error-handling/exercises/README.md @@ -0,0 +1,11 @@ +# Header + +What you will learn? + +1. **[Refactor](https://github.com/inancgumus/learngo/tree/master/28-error-handling/exercises/01-refactor)** + + Refactor the headerOf function with a map + defer + and a named param. + +2. **[text](https://github.com/inancgumus/learngo/tree/master/)** + + text \ No newline at end of file diff --git a/internal/magic/detect.go b/internal/magic/detect.go index f67dfc0..60d8dc3 100644 --- a/internal/magic/detect.go +++ b/internal/magic/detect.go @@ -14,7 +14,8 @@ import ( "os" ) -// Detect returns only the valid filenames that match to a header of the given format. +// Detect returns the files that have a valid header (file signature). +// A valid header is determined by the format. func Detect(format string, filenames []string) (valids []string, err error) { defer func() { if rerr := recover(); rerr != nil {