first commit
This commit is contained in:
		
							
								
								
									
										3
									
								
								createAGoModule/greetings/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								createAGoModule/greetings/go.mod
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
module example.com/greetings
 | 
			
		||||
 | 
			
		||||
go 1.17
 | 
			
		||||
							
								
								
									
										59
									
								
								createAGoModule/greetings/greetings.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								createAGoModule/greetings/greetings.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
			
		||||
package greetings
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
    "math/rand"
 | 
			
		||||
    "time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Hello returns a greeting for the named person.
 | 
			
		||||
func Hello(name string) (string, error) {
 | 
			
		||||
    // If no name was given, return an error with a message.
 | 
			
		||||
    if name == "" {
 | 
			
		||||
        return name, errors.New("empty name")
 | 
			
		||||
    }
 | 
			
		||||
    // Create a message using a random format.
 | 
			
		||||
    message := fmt.Sprintf(randomFormat(), name)
 | 
			
		||||
//    message := fmt.Sprintf(randomFormat())
 | 
			
		||||
    return message, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Hellos returns a map that associates each of the named people
 | 
			
		||||
// with a greeting message.
 | 
			
		||||
func Hellos(names []string) (map[string]string, error) {
 | 
			
		||||
    // A map to associate names with messages.
 | 
			
		||||
    messages := make(map[string]string)
 | 
			
		||||
    // Loop through the received slice of names, calling
 | 
			
		||||
    // the Hello function to get a message for each name.
 | 
			
		||||
    for _, name := range names {
 | 
			
		||||
        message, err := Hello(name)
 | 
			
		||||
        if err != nil {
 | 
			
		||||
            return nil, err
 | 
			
		||||
        }
 | 
			
		||||
        // In the map, associate the retrieved message with
 | 
			
		||||
        // the name.
 | 
			
		||||
        messages[name] = message
 | 
			
		||||
    }
 | 
			
		||||
    return messages, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// init sets initial values for variables used in the function.
 | 
			
		||||
func init() {
 | 
			
		||||
    rand.Seed(time.Now().UnixNano())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// randomFormat returns one of a set of greeting messages. The returned
 | 
			
		||||
// message is selected at random.
 | 
			
		||||
func randomFormat() string {
 | 
			
		||||
    // A slice of message formats.
 | 
			
		||||
    formats := []string{
 | 
			
		||||
        "Hi, %v. Welcome!",
 | 
			
		||||
        "Great to see you, %v!",
 | 
			
		||||
        "Hail, %v! Well met!",
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Return a randomly selected message format by specifying
 | 
			
		||||
    // a random index for the slice of formats.
 | 
			
		||||
    return formats[rand.Intn(len(formats))]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								createAGoModule/greetings/greetings_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								createAGoModule/greetings/greetings_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
package greetings
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
    "testing"
 | 
			
		||||
    "regexp"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TestHelloName calls greetings.Hello with a name, checking
 | 
			
		||||
// for a valid return value.
 | 
			
		||||
func TestHelloName(t *testing.T) {
 | 
			
		||||
    name := "Gladys"
 | 
			
		||||
    want := regexp.MustCompile(`\b`+name+`\b`)
 | 
			
		||||
    msg, err := Hello("Gladys")
 | 
			
		||||
    if !want.MatchString(msg) || err != nil {
 | 
			
		||||
        t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TestHelloEmpty calls greetings.Hello with an empty string,
 | 
			
		||||
// checking for an error.
 | 
			
		||||
func TestHelloEmpty(t *testing.T) {
 | 
			
		||||
    msg, err := Hello("")
 | 
			
		||||
    if msg != "" || err == nil {
 | 
			
		||||
        t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								createAGoModule/hello/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								createAGoModule/hello/go.mod
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
module example.com/hello
 | 
			
		||||
 | 
			
		||||
go 1.17
 | 
			
		||||
 | 
			
		||||
replace example.com/greetings => ../greetings
 | 
			
		||||
 | 
			
		||||
require example.com/greetings v0.0.0-00010101000000-000000000000
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								createAGoModule/hello/hello
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								createAGoModule/hello/hello
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										34
									
								
								createAGoModule/hello/hello.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								createAGoModule/hello/hello.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
    "fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
 | 
			
		||||
    "example.com/greetings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
    // Set properties of the predefined Logger, including
 | 
			
		||||
    // the log entry prefix and a flag to disable printing
 | 
			
		||||
    // the time, source file, and line number.
 | 
			
		||||
    log.SetPrefix("greetings: ")
 | 
			
		||||
    log.SetFlags(0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Request a greeting message.
 | 
			
		||||
    // message, err := greetings.Hello("Gladys")
 | 
			
		||||
	
 | 
			
		||||
    // A slice of names.
 | 
			
		||||
    names := []string{"Gladys", "Samantha", "Darrin"}
 | 
			
		||||
	message, err := greetings.Hellos(names)
 | 
			
		||||
 | 
			
		||||
    // If an error was returned, print it to the console and
 | 
			
		||||
    // exit the program.
 | 
			
		||||
    if err != nil {
 | 
			
		||||
        log.Fatal(err)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If no error was returned, print the returned message
 | 
			
		||||
    // to the console.
 | 
			
		||||
    fmt.Println(message)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user