| @ -0,0 +1,36 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "os" | |||||
| ) | |||||
| func getPassedArgs() string { | |||||
| if len(os.Args) != 2 { | |||||
| fmt.Printf("Exactly 1 argument is needed\n") | |||||
| os.Exit(1) | |||||
| } | |||||
| return os.Args[1] | |||||
| } | |||||
| func main() { | |||||
| m := map[string]string{ | |||||
| "305": "Sue", | |||||
| "204": "Bob", | |||||
| "631": "Jake", | |||||
| "073": "Tracy", | |||||
| } | |||||
| key := getPassedArgs() | |||||
| if name := m[key]; name != "" { | |||||
| fmt.Println("Hi,", name) | |||||
| } else { | |||||
| fmt.Println(key, "not found") | |||||
| os.Exit(1) | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,57 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "os" | |||||
| "strings" | |||||
| ) | |||||
| type locale struct { | |||||
| language string | |||||
| region string | |||||
| } | |||||
| func getLocales() map[locale]struct{} { | |||||
| supportedLocales := make(map[locale]struct{}, 5) | |||||
| supportedLocales[locale{"en", "US"}] = struct{}{} | |||||
| supportedLocales[locale{"en", "CN"}] = struct{}{} | |||||
| supportedLocales[locale{"fr", "CN"}] = struct{}{} | |||||
| supportedLocales[locale{"fr", "FR"}] = struct{}{} | |||||
| supportedLocales[locale{"ru", "RU"}] = struct{}{} | |||||
| return supportedLocales | |||||
| } | |||||
| func localExists(l locale) bool { | |||||
| _, exists := getLocales()[l] | |||||
| return exists | |||||
| } | |||||
| func main() { | |||||
| if len(os.Args) != 2 { | |||||
| fmt.Println("No locale passed") | |||||
| os.Exit(1) | |||||
| } | |||||
| localeParts := strings.Split(os.Args[1], "_") | |||||
| if len(localeParts) != 2 { | |||||
| fmt.Printf("Invalid locale passed: %v\n", os.Args[1]) | |||||
| os.Exit(1) | |||||
| } | |||||
| passedLocale := locale{ | |||||
| language: localeParts[0], | |||||
| region: localeParts[1], | |||||
| } | |||||
| if !localExists(passedLocale) { | |||||
| fmt.Printf("Locale not supported: %v\n", os.Args[1]) | |||||
| os.Exit(1) | |||||
| } | |||||
| fmt.Println("Locale passed is supported") | |||||
| } | |||||
| @ -0,0 +1,46 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "os" | |||||
| ) | |||||
| func getPassedArgs(minArgs int) []string { | |||||
| if len(os.Args) < minArgs { | |||||
| fmt.Printf("At least %v arguments are needed\n", minArgs) | |||||
| os.Exit(1) | |||||
| } | |||||
| var args []string | |||||
| for i := 1; i < len(os.Args); i++ { | |||||
| args = append(args, os.Args[i]) | |||||
| } | |||||
| return args | |||||
| } | |||||
| func findLongest(args []string) string { | |||||
| var longest string | |||||
| for i := 0; i < len(args); i++ { | |||||
| if len(args[i]) > len(longest) { | |||||
| longest = args[i] | |||||
| } | |||||
| } | |||||
| return longest | |||||
| } | |||||
| func main() { | |||||
| if longest := findLongest(getPassedArgs(3)); len(longest) > 0 { | |||||
| fmt.Println("The longest word passed was:", longest) | |||||
| } else { | |||||
| fmt.Println("There was an error") | |||||
| os.Exit(1) | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,33 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "os" | |||||
| ) | |||||
| func getPassedArgs() []string { | |||||
| var args []string | |||||
| for i := 1; i < len(os.Args); i++ { | |||||
| args = append(args, os.Args[i]) | |||||
| } | |||||
| return args | |||||
| } | |||||
| func getLocals(extraLocals []string) []string { | |||||
| var locales []string | |||||
| locales = append(locales, "en_US", "fr_FR") | |||||
| locales = append(locales, extraLocals...) | |||||
| return locales | |||||
| } | |||||
| func main() { | |||||
| locales := getLocals(getPassedArgs()) | |||||
| fmt.Println("Locales to use:", locales) | |||||
| } | |||||
| @ -0,0 +1,21 @@ | |||||
| package main | |||||
| import "fmt" | |||||
| func message() string { | |||||
| s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} | |||||
| m := fmt.Sprintln("First: ", s[0], s[0:1], s[:1]) | |||||
| m += fmt.Sprintln("Last: ", s[len(s)-1], s[len(s)-1:len(s)], s[len(s)-1:]) | |||||
| m += fmt.Sprintln("First 5: ", s[:5]) | |||||
| m += fmt.Sprintln("Last 4: ", s[len(s)-4:]) | |||||
| m += fmt.Sprintln("Middle 5:", s[2:7]) | |||||
| return m | |||||
| } | |||||
| func main() { | |||||
| fmt.Print(message()) | |||||
| } | |||||
| @ -0,0 +1,21 @@ | |||||
| package main | |||||
| import "fmt" | |||||
| func genSlices() ([]int, []int, []int) { | |||||
| var s1 []int | |||||
| s2 := make([]int, 10) | |||||
| s3 := make([]int, 10, 50) | |||||
| return s1, s2, s3 | |||||
| } | |||||
| func main() { | |||||
| s1, s2, s3 := genSlices() | |||||
| fmt.Printf("s1: len = %v cap = %v\n", len(s1), cap(s1)) | |||||
| fmt.Printf("s2: len = %v cap = %v\n", len(s2), cap(s2)) | |||||
| fmt.Printf("s3: len = %v cap = %v\n", len(s3), cap(s3)) | |||||
| } | |||||
| @ -0,0 +1,82 @@ | |||||
| package main | |||||
| import "fmt" | |||||
| func linked() (int, int, int) { | |||||
| s1 := []int{1, 2, 3, 4, 5} | |||||
| s2 := s1 | |||||
| s3 := s1[:] | |||||
| s1[3] = 99 | |||||
| return s1[3], s2[3], s3[3] | |||||
| } | |||||
| func noLink() (int, int) { | |||||
| s1 := []int{1, 2, 3, 4, 5} | |||||
| s2 := s1 | |||||
| s1 = append(s1, 6) | |||||
| s1[3] = 99 | |||||
| return s1[3], s2[3] | |||||
| } | |||||
| func capLinked() (int, int) { | |||||
| s1 := make([]int, 5, 10) | |||||
| s1[0], s1[1], s1[2], s1[3], s1[4] = 1, 2, 3, 4, 5 | |||||
| s2 := s1 | |||||
| s1 = append(s1, 6) | |||||
| s1[3] = 99 | |||||
| return s1[3], s2[3] | |||||
| } | |||||
| func capNoLink() (int, int) { | |||||
| s1 := make([]int, 5, 10) | |||||
| s1[0], s1[1], s1[2], s1[3], s1[4] = 1, 2, 3, 4, 5 | |||||
| s2 := s1 | |||||
| s1 = append(s1, []int{10: 11}...) | |||||
| s1[3] = 99 | |||||
| return s1[3], s2[3] | |||||
| } | |||||
| func copyNoLink() (int, int, int) { | |||||
| s1 := []int{1, 2, 3, 4, 5} | |||||
| s2 := make([]int, len(s1)) | |||||
| copied := copy(s2, s1) | |||||
| s1[3] = 99 | |||||
| return s1[3], s2[3], copied | |||||
| } | |||||
| func appendNoLink() (int, int) { | |||||
| s1 := []int{1, 2, 3, 4, 5} | |||||
| s2 := append([]int{}, s1...) | |||||
| s1[3] = 99 | |||||
| return s1[3], s2[3] | |||||
| } | |||||
| func main() { | |||||
| l1, l2, l3 := linked() | |||||
| fmt.Println("Linked: ", l1, l2, l3) | |||||
| nl1, nl2 := noLink() | |||||
| fmt.Println("No Link: ", nl1, nl2) | |||||
| cl1, cl2 := capLinked() | |||||
| fmt.Println("Cap Linked: ", cl1, cl2) | |||||
| cn1, cn2 := capNoLink() | |||||
| fmt.Println("Cap no Link: ", cn1, cn2) | |||||
| copy1, copy2, copied := copyNoLink() | |||||
| fmt.Print("Copy No Link: ", copy1, copy2) | |||||
| fmt.Printf(" (Number of elements copied: %v\n", copied) | |||||
| a1, a2 := appendNoLink() | |||||
| fmt.Println("Append No Link: ", a1, a2) | |||||
| } | |||||