Loading greeter.go 0 → 100644 +44 −0 Original line number Diff line number Diff line package greeter import ( "fmt" "strings" ) const defaultNameText = "World" func defaultName(name string) string { if name == "" { return defaultNameText } return name } // Greeting returns a greeting message func Greeting(name ...string) string { var names strings.Builder count := len(name) switch count { case 0: names.WriteString(defaultName("")) case 1: names.WriteString(defaultName(name[0])) default: for i, v := range name { if i > 0 { names.WriteString(", ") } if i == count-1 { names.WriteString("and ") } names.WriteString(defaultName(v)) } } return fmt.Sprintf("Hello, %s!", names.String()) } greeter_test.go 0 → 100644 +21 −0 Original line number Diff line number Diff line package greeter import "testing" func TestGreeter(t *testing.T) { for ti, tc := range []struct { name []string expected string }{ {name: []string{}, expected: "Hello, World!"}, {name: []string{""}, expected: "Hello, World!"}, {name: []string{"Tester"}, expected: "Hello, Tester!"}, {name: []string{"A", "B"}, expected: "Hello, A, and B!"}, {name: []string{"A", "B", "C"}, expected: "Hello, A, B, and C!"}, {name: []string{"A", "", "C"}, expected: "Hello, A, World, and C!"}, } { if tr := Greeting(tc.name...); tr != tc.expected { t.Errorf("[% 2d] Greeting(%v) is %q, but got %q", ti, tc.name, tr, tc.expected) } } } Loading
greeter.go 0 → 100644 +44 −0 Original line number Diff line number Diff line package greeter import ( "fmt" "strings" ) const defaultNameText = "World" func defaultName(name string) string { if name == "" { return defaultNameText } return name } // Greeting returns a greeting message func Greeting(name ...string) string { var names strings.Builder count := len(name) switch count { case 0: names.WriteString(defaultName("")) case 1: names.WriteString(defaultName(name[0])) default: for i, v := range name { if i > 0 { names.WriteString(", ") } if i == count-1 { names.WriteString("and ") } names.WriteString(defaultName(v)) } } return fmt.Sprintf("Hello, %s!", names.String()) }
greeter_test.go 0 → 100644 +21 −0 Original line number Diff line number Diff line package greeter import "testing" func TestGreeter(t *testing.T) { for ti, tc := range []struct { name []string expected string }{ {name: []string{}, expected: "Hello, World!"}, {name: []string{""}, expected: "Hello, World!"}, {name: []string{"Tester"}, expected: "Hello, Tester!"}, {name: []string{"A", "B"}, expected: "Hello, A, and B!"}, {name: []string{"A", "B", "C"}, expected: "Hello, A, B, and C!"}, {name: []string{"A", "", "C"}, expected: "Hello, A, World, and C!"}, } { if tr := Greeting(tc.name...); tr != tc.expected { t.Errorf("[% 2d] Greeting(%v) is %q, but got %q", ti, tc.name, tr, tc.expected) } } }