diff --git a/ch1/1_1.go b/ch1/1_1.go new file mode 100644 index 0000000..23ee595 --- /dev/null +++ b/ch1/1_1.go @@ -0,0 +1,12 @@ +package main + +import ( + "fmt" + "os" + "strings" +) + +func main() { + fmt.Printf("command: %s\n", os.Args[0]) + fmt.Printf("args: %s\n", strings.Join(os.Args[1:], " ")) +} diff --git a/ch1/1_2.go b/ch1/1_2.go new file mode 100644 index 0000000..02086cc --- /dev/null +++ b/ch1/1_2.go @@ -0,0 +1,19 @@ +package main + +import ( + "fmt" + "os" + "strings" +) + +func main() { + fmt.Printf("command: %s\n", os.Args[0]) + fmt.Printf("args: %s\n", strings.Join(os.Args[1:], " ")) + str := "" + deli := " " + for i, j := range os.Args[1:] { + str += fmt.Sprintf("index: %d value: %s", i, j) + str += deli + } + fmt.Println(str) +} diff --git a/ch1/1_3.go b/ch1/1_3.go new file mode 100644 index 0000000..5c9b00c --- /dev/null +++ b/ch1/1_3.go @@ -0,0 +1,33 @@ +package main + +import ( + "fmt" + "os" + "strings" + "time" +) + +func usingJoin() { + fmt.Println(strings.Join(os.Args[1:], " ")) +} + +func forLoop() { + s, sep := "", " " + for _, i := range os.Args[1:] { + s += i + s += sep + } + fmt.Println(s) +} + +func main() { + start := time.Now() + forLoop() + t1 := time.Since(start) + fmt.Println("for loop: ", t1) + start = time.Now() + usingJoin() + t2 := time.Since(start) + fmt.Println("using join: ", t2) + fmt.Println("Δ", t1-t2) +} diff --git a/ch1/dup2.go b/ch1/dup2.go new file mode 100644 index 0000000..8f2aab0 --- /dev/null +++ b/ch1/dup2.go @@ -0,0 +1,37 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" +) + +func main() { + counts := make(map[string]int) + file := os.Args[1:] + if len(file) == 0 { + countLines(os.Stdin, counts) + } else { + for _, i := range file { + f, err := os.Open(i) + if err != nil { + log.Print(err) + } + countLines(f, counts) + f.Close() + } + } + for lines, n := range counts { + if n > 1 { + fmt.Printf("%d\t%s\n", n, lines) + } + } +} + +func countLines(f *os.File, counts map[string]int) { + input := bufio.NewScanner(f) + for input.Scan() { + counts[input.Text()]++ + } +} diff --git a/ch1/echo.go b/ch1/echo.go new file mode 100644 index 0000000..a5df3ec --- /dev/null +++ b/ch1/echo.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" + "os" + "strings" +) + +func main() { + fmt.Println(strings.Join(os.Args[1:], " ")) +}