
stuttgart-gophers.de

Stuttgart Gophers

AlexTLDR
Presented by: AlexTLDR

go mod init example.com/your-repositorygo mod init learngo-pockets/hello package main
import "fmt"
func main() {
fmt.Println("Hello world")
} go run main.go$> go run main.go
Hello world import "fmt"func main() {
fmt.Println("Hello world")
}package main
import "testing"
func ExampleHello() {
Hello()
// Output:
// Hello world
}go testpackage main
import "fmt"
func main() {
greeting := greet()
fmt.Println(greeting)
}
// greet returns a greeting to the world.
func greet() string {
// return a simple greeting message
return "Hello world"
}func main() {
greeting := greet()
fmt.Println(greeting)
}Test<FunctionName>(t *testing.T)package main
import "testing"
func TestGreet(t *testing.T) {
want := "Hello world"
got := greet()
if got != want {
// mark this test as failed
t.Errorf("expected: %q, got: %q", want, got)
}
}want := "Hello world"
got := greet()
if got != want {
// mark this test as failed
t.Errorf("expected: %q, got: %q", want, got)
}t.Errorf("expected: %q, got: %q", want, got)package main
import "fmt"
func main() {
greeting := greet("en")
fmt.Println(greeting)
}
// language represents the language's code
type language string
// greet says hello to the world in the specified language
func greet(l language) string {
switch l {
case "en":
return "Hello world"
case "fr":
return "Bonjour le monde"
default:
return ""
}
}type language stringfunc greet(l language) stringgreeting := greet("en")switch l {
case "en":
return "Hello world"
case "fr":
return "Bonjour le monde"
default:
return ""
}package main
import "testing"
func ExampleMain() {
...
}
func TestGreet_English(t *testing.T) {
lang := language("en")
want := "Hello world"
got := greet(lang)
if got != want {
// mark this test as failed
t.Errorf("expected: %q, got: %q", want, got)
}
}
func TestGreet_French(t *testing.T) {
lang := language("fr")
want := "Bonjour le monde"
got := greet(lang)
if got != want {
// mark this test as failed
t.Errorf("expected: %q, got: %q", want, got)
}
}
func TestGreet_Akkadian(t *testing.T) {
// Akkadian is not implemented yet!
lang := language("akk")
want := ""
got := greet(lang)
if got != want {
// mark this test as failed
t.Errorf("expected: %q, got: %q", want, got)
}
}// phrasebook holds greeting for each supported language
var phrasebook = map[language]string{
"el": "Χαίρετε Κόσμε", // Greek
"en": "Hello world", // English
"fr": "Bonjour le monde", // French
"he": "שלום עולם", // Hebrew
"ur": "ہیلو دنیا", // Urdu
"vi": "Xin chào Thế Giới", // Vietnamese
}
// greet says hello to the world in various languages
func greet(l language) string {
greeting, ok := phrasebook[l]
if !ok {
return fmt.Sprintf("unsupported language: %q", l)
}
return greeting
}// greet says hello to the world in various languages
func greet(l language) string {
greeting, ok := phrasebook[l]
if !ok {
return fmt.Sprintf("unsupported language: %q", l)
}
return greeting
}got := greet(language(lang))
if got != want {
t.Errorf("expected: %q, got: %q", want, got)
}func TestGreet(t *testing.T) {
type testCase struct {
lang language
want string
}
var tests = map[string]testCase{
"English": {
lang: "en",
want: "Hello world",
},
"French": {
lang: "fr",
want: "Bonjour le monde",
},
"Akkadian, not supported": {
lang: "akk",
want: `unsupported language: "akk"`,
},
"Greek": {
lang: "el",
want: "Χαίρετε Κόσμε",
},
...
"Empty": {
lang: "",
want: `unsupported language: ""`,
},
}
// range over all the scenarios
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
got := greet(tc.lang)
if got != tc.want {
t.Errorf("expected: %q, got: %q", tc.want, got)
}
})
}
}type testCase struct {
lang language
want string
}var tests = map[string]testCase{
"English": {
lang: "en",
want: "Hello world",
},
"French": {
lang: "fr",
want: "Bonjour le monde",
},
} for name, tc := range tests {
t.Run(name, func(t *testing.T) {
got := greet(tc.language)
if got != tc.want {
t.Errorf("expected: %q, got: %q", tc.want, got)
}
})
} var tests = map[string]testCase{
"English": {...},
"French": {...},
"Akkadian, not supported": {
lang: "akk",
want: `unsupported language: "akk"`,
},
}package main
import (
"flag"
"fmt"
)
func main() {
var lang string
flag.StringVar(&lang,
"lang",
"en",
"The required language, e.g. en, ur...")
flag.Parse()
greeting := greet(language(lang))
fmt.Println(greeting)
}
// language represents a language
type language string
// phrasebook holds greeting for each supported language
var phrasebook = map[language]string{
...
}
// greet says hello to the world
func greet(l language) string {
...
}❯ go run main.go -lang=el
Χαίρετε ΚόσμεBook

Slides
