|
|
|
// Provides a Hello world example with tests
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Constants can be grouped in a block.
|
|
|
|
// Add a line between related consts for
|
|
|
|
// readbility
|
|
|
|
const (
|
|
|
|
french = "French"
|
|
|
|
spanish = "Spanish"
|
|
|
|
|
|
|
|
englishHelloPrefix = "Hello, "
|
|
|
|
spanishHelloPrefix = "Hola, "
|
|
|
|
frenchHelloPrefix = "Bonjour, "
|
|
|
|
)
|
|
|
|
|
|
|
|
// Hello prints the string "Hello, world"
|
|
|
|
func Hello(name string, language string) string {
|
|
|
|
if name == "" {
|
|
|
|
name = "World"
|
|
|
|
}
|
|
|
|
|
|
|
|
return greetingPrefix(language) + name
|
|
|
|
}
|
|
|
|
|
|
|
|
// greetingPrefix Using a named return value will initialize a "zero value"
|
|
|
|
// variable which as you can see below can be assigned to.
|
|
|
|
// this will display in Go Doc for your function.
|
|
|
|
// Lower case letter functions are "private" functions. They are internal to implementation.
|
|
|
|
func greetingPrefix(language string) (prefix string) {
|
|
|
|
switch language {
|
|
|
|
case french:
|
|
|
|
prefix = frenchHelloPrefix
|
|
|
|
case spanish:
|
|
|
|
prefix = spanishHelloPrefix
|
|
|
|
default:
|
|
|
|
prefix = englishHelloPrefix
|
|
|
|
}
|
|
|
|
// we use names return value in function signature
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
fmt.Println(Hello("world", ""))
|
|
|
|
}
|