learned I didn't need git for external modules and different folders can have different mains
This commit is contained in:
		@@ -1,3 +0,0 @@
 | 
				
			|||||||
module averageWithArgs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
go 1.21.3
 | 
					 | 
				
			||||||
@@ -4,8 +4,8 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/datafile"
 | 
						"trying_out_go/pkg/datafile"
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/keyboard"
 | 
						"trying_out_go/pkg/keyboard"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func averageHeadFirstSolution() {
 | 
					func averageHeadFirstSolution() {
 | 
				
			||||||
@@ -8,7 +8,7 @@ import (
 | 
				
			|||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/keyboard"
 | 
						"trying_out_go/pkg/keyboard"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func averageMySolution() {
 | 
					func averageMySolution() {
 | 
				
			||||||
@@ -3,7 +3,7 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/calendar"
 | 
						"trying_out_go/pkg/calendar"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func companyCalendar() {
 | 
					func companyCalendar() {
 | 
				
			||||||
@@ -3,10 +3,10 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/datafile"
 | 
					 | 
				
			||||||
	"git.linuxhg.com/Go_Training/keyboard"
 | 
					 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
						"trying_out_go/pkg/datafile"
 | 
				
			||||||
 | 
						"trying_out_go/pkg/keyboard"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func countVotes() {
 | 
					func countVotes() {
 | 
				
			||||||
							
								
								
									
										28
									
								
								cmd/playground/directory.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								cmd/playground/directory.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func scanDirectory(path string) {
 | 
				
			||||||
 | 
						fmt.Println(path)
 | 
				
			||||||
 | 
						files, err := os.ReadDir(path)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, file := range files {
 | 
				
			||||||
 | 
							filePath := filepath.Join(path, file.Name())
 | 
				
			||||||
 | 
							if file.IsDir() {
 | 
				
			||||||
 | 
								scanDirectory(filePath)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								fmt.Println(filePath)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func directory() {
 | 
				
			||||||
 | 
						scanDirectory("../../trying_out_go")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -3,7 +3,7 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/magazine"
 | 
						"trying_out_go/pkg/magazine"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func printInfo(s *magazine.Subscriber) {
 | 
					func printInfo(s *magazine.Subscriber) {
 | 
				
			||||||
@@ -4,7 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/keyboard"
 | 
						"trying_out_go/pkg/keyboard"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func passFail() {
 | 
					func passFail() {
 | 
				
			||||||
@@ -116,6 +116,12 @@ func main() {
 | 
				
			|||||||
				companyCalendar()
 | 
									companyCalendar()
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "Directory List",
 | 
				
			||||||
 | 
								launchFunction: func() {
 | 
				
			||||||
 | 
									directory()
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	menu := wmenu.NewMenu("Choose a program.")
 | 
						menu := wmenu.NewMenu("Choose a program.")
 | 
				
			||||||
	menu.Action(func(opts []wmenu.Opt) error {
 | 
						menu.Action(func(opts []wmenu.Opt) error {
 | 
				
			||||||
@@ -4,7 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.linuxhg.com/Go_Training/keyboard"
 | 
						"trying_out_go/pkg/keyboard"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func toCelsius() {
 | 
					func toCelsius() {
 | 
				
			||||||
							
								
								
									
										52
									
								
								cmd/sum/sum.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								cmd/sum/sum.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func OpenFile(fileName string) (*os.File, error) {
 | 
				
			||||||
 | 
						fmt.Println("Opening", fileName)
 | 
				
			||||||
 | 
						return os.Open(fileName)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func CloseFile(file *os.File) {
 | 
				
			||||||
 | 
						fmt.Println("Closing file")
 | 
				
			||||||
 | 
						file.Close()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetFloats(fileName string) ([]float64, error) {
 | 
				
			||||||
 | 
						var numbers []float64
 | 
				
			||||||
 | 
						file, err := OpenFile(fileName)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer CloseFile(file)
 | 
				
			||||||
 | 
						scanner := bufio.NewScanner(file)
 | 
				
			||||||
 | 
						for scanner.Scan() {
 | 
				
			||||||
 | 
							number, err := strconv.ParseFloat(scanner.Text(), 64)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							numbers = append(numbers, number)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if scanner.Err() != nil {
 | 
				
			||||||
 | 
							return nil, scanner.Err()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return numbers, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
						numbers, err := GetFloats(os.Args[1])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var sum float64 = 0
 | 
				
			||||||
 | 
						for _, number := range numbers {
 | 
				
			||||||
 | 
							sum += number
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fmt.Printf("Sum: %0.2f\n", sum)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -3,9 +3,6 @@ module trying_out_go
 | 
				
			|||||||
go 1.21.5
 | 
					go 1.21.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	git.linuxhg.com/Go_Training/datafile v0.0.0-20240111160218-6989e96515a9
 | 
					 | 
				
			||||||
	git.linuxhg.com/Go_Training/keyboard v0.0.0-20240111160241-d208f095efce
 | 
					 | 
				
			||||||
	git.linuxhg.com/Go_Training/magazine v0.0.0-20240112152452-7bd91fa7e6c2
 | 
					 | 
				
			||||||
	github.com/charmbracelet/bubbles v0.17.1
 | 
						github.com/charmbracelet/bubbles v0.17.1
 | 
				
			||||||
	github.com/charmbracelet/bubbletea v0.25.0
 | 
						github.com/charmbracelet/bubbletea v0.25.0
 | 
				
			||||||
	github.com/charmbracelet/lipgloss v0.9.1
 | 
						github.com/charmbracelet/lipgloss v0.9.1
 | 
				
			||||||
@@ -13,7 +10,6 @@ require (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	git.linuxhg.com/Go_Training/calendar v0.0.0-20240131153240-372e0ebc267d // indirect
 | 
					 | 
				
			||||||
	github.com/atotto/clipboard v0.1.4 // indirect
 | 
						github.com/atotto/clipboard v0.1.4 // indirect
 | 
				
			||||||
	github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
 | 
						github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
 | 
				
			||||||
	github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
 | 
						github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
 | 
				
			||||||
							
								
								
									
										56
									
								
								pkg/calendar/date.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								pkg/calendar/date.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					package calendar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Date Struct
 | 
				
			||||||
 | 
					type Date struct {
 | 
				
			||||||
 | 
						year  int
 | 
				
			||||||
 | 
						month int
 | 
				
			||||||
 | 
						day   int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Setter Methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetYear Method
 | 
				
			||||||
 | 
					func (d *Date) SetYear(year int) error {
 | 
				
			||||||
 | 
						if year < 1 {
 | 
				
			||||||
 | 
							return errors.New("invalid year")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d.year = year
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetMonth Method
 | 
				
			||||||
 | 
					func (d *Date) SetMonth(month int) error {
 | 
				
			||||||
 | 
						if month < 1 || month > 12 {
 | 
				
			||||||
 | 
							return errors.New("invalid month")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d.month = month
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetDay Method
 | 
				
			||||||
 | 
					func (d *Date) SetDay(day int) error {
 | 
				
			||||||
 | 
						if day < 1 || day > 31 {
 | 
				
			||||||
 | 
							return errors.New("invalid day")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d.day = day
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Getter Methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Year Method
 | 
				
			||||||
 | 
					func (d *Date) Year() int {
 | 
				
			||||||
 | 
						return d.year
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Month Method
 | 
				
			||||||
 | 
					func (d *Date) Month() int {
 | 
				
			||||||
 | 
						return d.month
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Day Method
 | 
				
			||||||
 | 
					func (d *Date) Day() int {
 | 
				
			||||||
 | 
						return d.day
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								pkg/calendar/event.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								pkg/calendar/event.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package calendar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"unicode/utf8"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Event struct {
 | 
				
			||||||
 | 
						title string
 | 
				
			||||||
 | 
						Date
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *Event) Title() string {
 | 
				
			||||||
 | 
						return e.title
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *Event) SetTitle(title string) error {
 | 
				
			||||||
 | 
						if utf8.RuneCountInString(title) > 32 {
 | 
				
			||||||
 | 
							return errors.New("invalid title length")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						e.title = title
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								pkg/datafile/floats.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								pkg/datafile/floats.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					package datafile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetFloats reads a float64 from each line of a file.
 | 
				
			||||||
 | 
					func GetFloats(fileName string) ([]float64, error) {
 | 
				
			||||||
 | 
						var numbers []float64
 | 
				
			||||||
 | 
						file, err := os.Open(fileName)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						scanner := bufio.NewScanner(file)
 | 
				
			||||||
 | 
						for scanner.Scan() {
 | 
				
			||||||
 | 
							number, err := strconv.ParseFloat(scanner.Text(), 64)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							numbers = append(numbers, number)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						err = file.Close()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if scanner.Err() != nil {
 | 
				
			||||||
 | 
							return numbers, scanner.Err()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return numbers, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										31
									
								
								pkg/datafile/strings.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								pkg/datafile/strings.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package datafile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetStrings(filename string) ([]string, error) {
 | 
				
			||||||
 | 
						var lines []string
 | 
				
			||||||
 | 
						file, err := os.Open(filename)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						scanner := bufio.NewScanner(file)
 | 
				
			||||||
 | 
						for scanner.Scan() {
 | 
				
			||||||
 | 
							line := scanner.Text()
 | 
				
			||||||
 | 
							lines = append(lines, line)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = file.Close()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if scanner.Err() != nil {
 | 
				
			||||||
 | 
							return nil, scanner.Err()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return lines, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								pkg/date/date.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								pkg/date/date.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					package calendar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Date Struct
 | 
				
			||||||
 | 
					type Date struct {
 | 
				
			||||||
 | 
						year  int
 | 
				
			||||||
 | 
						month int
 | 
				
			||||||
 | 
						day   int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Setter Methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetYear Method
 | 
				
			||||||
 | 
					func (d *Date) SetYear(year int) error {
 | 
				
			||||||
 | 
						if year < 1 {
 | 
				
			||||||
 | 
							return errors.New("invalid year")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d.year = year
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetMonth Method
 | 
				
			||||||
 | 
					func (d *Date) SetMonth(month int) error {
 | 
				
			||||||
 | 
						if month < 1 || month > 12 {
 | 
				
			||||||
 | 
							return errors.New("invalid month")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d.month = month
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetDay Method
 | 
				
			||||||
 | 
					func (d *Date) SetDay(day int) error {
 | 
				
			||||||
 | 
						if day < 1 || day > 31 {
 | 
				
			||||||
 | 
							return errors.New("invalid day")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d.day = day
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Getter Methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Year Method
 | 
				
			||||||
 | 
					func (d *Date) Year() int {
 | 
				
			||||||
 | 
						return d.year
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Month Method
 | 
				
			||||||
 | 
					func (d *Date) Month() int {
 | 
				
			||||||
 | 
						return d.month
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Day Method
 | 
				
			||||||
 | 
					func (d *Date) Day() int {
 | 
				
			||||||
 | 
						return d.day
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								pkg/date/event.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								pkg/date/event.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package calendar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"unicode/utf8"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Event struct {
 | 
				
			||||||
 | 
						title string
 | 
				
			||||||
 | 
						Date
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *Event) Title() string {
 | 
				
			||||||
 | 
						return e.title
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *Event) SetTitle(title string) error {
 | 
				
			||||||
 | 
						if utf8.RuneCountInString(title) > 32 {
 | 
				
			||||||
 | 
							return errors.New("invalid title length")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						e.title = title
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								pkg/gadget/program.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								pkg/gadget/program.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Player interface {
 | 
				
			||||||
 | 
						Play(string)
 | 
				
			||||||
 | 
						Stop()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TryOut(player Player) {
 | 
				
			||||||
 | 
						player.Play("Test Track")
 | 
				
			||||||
 | 
						player.Stop()
 | 
				
			||||||
 | 
						recorder, ok := player.(TapeRecorder)
 | 
				
			||||||
 | 
						if ok {
 | 
				
			||||||
 | 
							recorder.Record()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func playList(device Player, songs []string) {
 | 
				
			||||||
 | 
						for _, song := range songs {
 | 
				
			||||||
 | 
							device.Play(song)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						device.Stop()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
						mixTape := []string{"Jessie's Girl", "Whip It", "9 to 5"}
 | 
				
			||||||
 | 
						var player Player = TapePlayer{}
 | 
				
			||||||
 | 
						playList(player, mixTape)
 | 
				
			||||||
 | 
						player = TapeRecorder{}
 | 
				
			||||||
 | 
						playList(player, mixTape)
 | 
				
			||||||
 | 
						TryOut(TapeRecorder{})
 | 
				
			||||||
 | 
						TryOut(TapePlayer{})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										31
									
								
								pkg/gadget/tape.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								pkg/gadget/tape.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TapePlayer struct {
 | 
				
			||||||
 | 
						Batteries string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t TapePlayer) Play(song string) {
 | 
				
			||||||
 | 
						fmt.Println("Playing", song)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t TapePlayer) Stop() {
 | 
				
			||||||
 | 
						fmt.Println("Stopped")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TapeRecorder struct {
 | 
				
			||||||
 | 
						Microphone int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t TapeRecorder) Play(song string) {
 | 
				
			||||||
 | 
						fmt.Println("Playing", song)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t TapeRecorder) Record() {
 | 
				
			||||||
 | 
						fmt.Println("Recording")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t TapeRecorder) Stop() {
 | 
				
			||||||
 | 
						fmt.Println("Stopped")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										38
									
								
								pkg/keyboard/keyboard.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								pkg/keyboard/keyboard.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					// Package keyboard reads user input from the keyboard.
 | 
				
			||||||
 | 
					package keyboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetString reads a string from the keyboard.
 | 
				
			||||||
 | 
					// It returns the string read and any error encountered.
 | 
				
			||||||
 | 
					func GetString() (string, error) {
 | 
				
			||||||
 | 
						reader := bufio.NewReader(os.Stdin)
 | 
				
			||||||
 | 
						input, err := reader.ReadString('\n')
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return input, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetFloat reads a floating-point number from the keyboard.
 | 
				
			||||||
 | 
					// It returns the number read and any error encountered.
 | 
				
			||||||
 | 
					func GetFloat() (float64, error) {
 | 
				
			||||||
 | 
						input, err := GetString()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return 0, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						input = strings.TrimSpace(input)
 | 
				
			||||||
 | 
						number, err := strconv.ParseFloat(input, 64)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return 0, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return number, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								pkg/magazine/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								pkg/magazine/types.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					package magazine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Subscriber struct {
 | 
				
			||||||
 | 
						Name   string
 | 
				
			||||||
 | 
						Rate   float64
 | 
				
			||||||
 | 
						Active bool
 | 
				
			||||||
 | 
						Address
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Employee struct {
 | 
				
			||||||
 | 
						Name   string
 | 
				
			||||||
 | 
						Salary float64
 | 
				
			||||||
 | 
						Address
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Address struct {
 | 
				
			||||||
 | 
						Street     string
 | 
				
			||||||
 | 
						City       string
 | 
				
			||||||
 | 
						State      string
 | 
				
			||||||
 | 
						PostalCode string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user