Browse Source

Add next code of chapter 4

master
T. Meissner 4 years ago
parent
commit
b073cd91f3
7 changed files with 296 additions and 0 deletions
  1. +36
    -0
      chapter_04/activity_4.02/main.go
  2. +57
    -0
      chapter_04/activity_4.03/main.go
  3. +46
    -0
      chapter_04/exercise_4.08/main.go
  4. +33
    -0
      chapter_04/exercise_4.09/main.go
  5. +21
    -0
      chapter_04/exercise_4.10/main.go
  6. +21
    -0
      chapter_04/exercise_4.11/main.go
  7. +82
    -0
      chapter_04/exercise_4.12/main.go

+ 36
- 0
chapter_04/activity_4.02/main.go View File

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

+ 57
- 0
chapter_04/activity_4.03/main.go View File

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

+ 46
- 0
chapter_04/exercise_4.08/main.go View File

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

+ 33
- 0
chapter_04/exercise_4.09/main.go View File

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

+ 21
- 0
chapter_04/exercise_4.10/main.go View File

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

+ 21
- 0
chapter_04/exercise_4.11/main.go View File

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

+ 82
- 0
chapter_04/exercise_4.12/main.go View File

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

Loading…
Cancel
Save