Implemented sum, urlfetch and fetchall tasks
This commit is contained in:
parent
7937c2dc03
commit
750eaed481
4 changed files with 106 additions and 4 deletions
|
@ -2,6 +2,61 @@
|
|||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
type HttpGetResult struct {
|
||||
Success bool
|
||||
Body string
|
||||
Elapsed time.Duration
|
||||
Size int
|
||||
Url string
|
||||
Error error
|
||||
}
|
||||
|
||||
func (result HttpGetResult) String() string {
|
||||
if result.Success {
|
||||
return fmt.Sprintf("%v\t%v\t%v", result.Elapsed, result.Size, result.Url)
|
||||
} else {
|
||||
return result.Error.Error()
|
||||
}
|
||||
}
|
||||
|
||||
func GetHttpBody(url string, ch chan HttpGetResult) {
|
||||
startTime := time.Now()
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
ch <- HttpGetResult{Success: false, Error: err}
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
data, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
ch <- HttpGetResult{Success: false, Error: err}
|
||||
return
|
||||
}
|
||||
ch <- HttpGetResult{
|
||||
Success: true,
|
||||
Body: string(data),
|
||||
Elapsed: time.Since(startTime),
|
||||
Size: len(data),
|
||||
Url: url,
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
startTime := time.Now()
|
||||
urls, ch := os.Args[1:], make(chan HttpGetResult)
|
||||
for _, url := range urls {
|
||||
go GetHttpBody(url, ch)
|
||||
}
|
||||
for i := 0; i < len(urls); i++ {
|
||||
fmt.Println(<-ch)
|
||||
}
|
||||
fmt.Println(time.Since(startTime), "elapsed")
|
||||
}
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
package sum
|
||||
|
||||
func Sum(a, b int64) int64 {
|
||||
return 0
|
||||
return a + b
|
||||
}
|
||||
|
|
|
@ -2,6 +2,26 @@
|
|||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
urls := os.Args[1:]
|
||||
for _, url := range urls {
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
log.Fatal("fetch:", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatal("fetch:", err)
|
||||
}
|
||||
fmt.Println(string(body))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,33 @@
|
|||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func LinesCountInFile(lines map[string]int, filename string) {
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
lines[line]++
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
filenames, lines := os.Args[1:], make(map[string]int)
|
||||
for _, filename := range filenames {
|
||||
LinesCountInFile(lines, filename)
|
||||
}
|
||||
for line, count := range lines {
|
||||
if count != 1 {
|
||||
fmt.Printf("%v\t%v\n", count, line)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue