| @ -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) | |||
| } | |||