diff --git a/Homework_1/go.mod b/Homework_1/go.mod new file mode 100644 index 0000000..8fb439d --- /dev/null +++ b/Homework_1/go.mod @@ -0,0 +1,5 @@ +module letsgo/homework1 + +go 1.27.0 + +require golang.org/x/net v0.59.0 // indirect diff --git a/Homework_1/main.go b/Homework_1/main.go new file mode 100644 index 0000000..775f642 --- /dev/null +++ b/Homework_1/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "bytes" + "fmt" + "os" + "strings" + + "golang.org/x/net/html" +) + +var raw = ` + + + +
+ node one image +

First node first child

+
+
+ node two image +

Second node second child

+
+
+ Third node second child +
+ + + ` + +func main() { + doc, err := html.Parse(bytes.NewReader([]byte(raw))) + if err != nil { + fmt.Fprintf(os.Stderr, "Parsing failed: %s\n", err) + os.Exit(-1) + } + + words, images := counterofwordsandimages(doc) + fmt.Printf("There are %d words and %d images\n", words, images) +} + +func counterofwordsandimages(doc *html.Node) (int, int) { + var words, images int + + visit(doc, &words, &images) + + return words, images +} + +func visit(n *html.Node, words, images *int) { + if n.Type == html.TextNode { + *words += len(strings.Fields(n.Data)) + } else if n.Type == html.ElementNode && n.Data == "img" { + *images++ + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + visit(c, words, images) + } +} diff --git a/closures/go.mod b/closures/go.mod new file mode 100644 index 0000000..e092793 --- /dev/null +++ b/closures/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.27.0 diff --git a/closures/main.go b/closures/main.go new file mode 100644 index 0000000..c093aad --- /dev/null +++ b/closures/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" +) + +func fib() func() int { + a, b := 0, 1 + return func() int { + a, b = b, a+b + return b + } +} + +func main() { + f := fib() + fmt.Println("This Fibonacci sequense < 10000") + for x := f(); x < 10000; x = f() { + fmt.Println(x) + } +} diff --git a/courses/1 b/courses/1 deleted file mode 100644 index 50c6344..0000000 --- a/courses/1 +++ /dev/null @@ -1,19 +0,0 @@ -package main - -import ( - "fmt" -) - -const name = "Sara" - -love := "Kahlousha" -number := 43900900 - -func main() { - - const world = "Mykids" - fmt.Println("Hello,", world) - - fmt.Println("I love ", name) - -} diff --git a/courses/main.go b/courses/main.go index b3719a9..f2a82cd 100644 --- a/courses/main.go +++ b/courses/main.go @@ -9,7 +9,7 @@ const ( // In other words, the binary number that is 1 followed by 100 zeroes. Big = 1 << 100 - //shoft it right 99 places + // shoft it right 99 places Small = Big >> 99 ) diff --git a/formatIO/b.txt b/formatIO/Testb.txt similarity index 100% rename from formatIO/b.txt rename to formatIO/Testb.txt diff --git a/formatIO/c.txt b/formatIO/Testc.txt similarity index 100% rename from formatIO/c.txt rename to formatIO/Testc.txt diff --git a/formatIO/a.txt b/formatIO/testA.txt similarity index 100% rename from formatIO/a.txt rename to formatIO/testA.txt diff --git a/go.work b/go.work index 1698e0d..10c4f82 100644 --- a/go.work +++ b/go.work @@ -3,6 +3,7 @@ go 1.27.1 use ( ./Composite_Types ./For_If_Switch + ./Homework_1 ./courses ./formatIO ./functions diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 0000000..c12a7c5 --- /dev/null +++ b/go.work.sum @@ -0,0 +1,6 @@ +golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA= +golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues= +golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/term v0.46.0/go.mod h1:+K02xbkittuwc0Am4abfA3Fc+XRGXkvBXNO88NCXPoc= +golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E= diff --git a/pointers/pointers.go b/pointers/pointers.go index dfaeac1..400f5f4 100644 --- a/pointers/pointers.go +++ b/pointers/pointers.go @@ -6,7 +6,6 @@ import ( ) func main() { - var sum float64 var n int @@ -27,5 +26,4 @@ func main() { } average := sum / float64(n) fmt.Println("The average of the total numbers is:", average) - } diff --git a/slices/go.mod b/slices/go.mod new file mode 100644 index 0000000..e092793 --- /dev/null +++ b/slices/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.27.0 diff --git a/slices/main.go b/slices/main.go new file mode 100644 index 0000000..f92e79a --- /dev/null +++ b/slices/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" +) + +func main() { + var s []int + t := []int{} + u := make([]string, 5) + v := make([]string, 0, 5) + + fmt.Printf("%d, %d, %T, %5t, %#[3]v\n", len(s), cap(s), s, s == nil) + fmt.Printf("%d, %d, %T, %5t, %#[3]v\n", len(t), cap(t), t, t == nil) + fmt.Printf("%d, %d, %T, %5t, %#[3]v\n", len(u), cap(u), u, u == nil) + fmt.Printf("%d, %d, %T, %5t, %#[3]v\n", len(v), cap(v), v, v == nil) + + s = append(s, 1, 1) + fmt.Printf("%d, %d, %T, %5t, %#[3]v\n", len(s), cap(s), s, s == nil) + + a := [...]int{1, 2, 3} + + b := a[:1] + + c := b[:2] + + fmt.Printf("a[%p] = %v\n", &a, a) + fmt.Printf("b[%p] = %[1]v\n", b) + fmt.Printf("c[%p] = %[1]v\n", c) +} diff --git a/struct/go.mod b/struct/go.mod new file mode 100644 index 0000000..2dc9774 --- /dev/null +++ b/struct/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.27.1 diff --git a/struct/main.go b/struct/main.go new file mode 100644 index 0000000..ab5d4ec --- /dev/null +++ b/struct/main.go @@ -0,0 +1,19 @@ +package main + +import ( + "encoding/json" + "fmt" +) + +type Response struct { + Page int `json:"page"` + Words []string `json:"words, omitempty"` +} + +func main() { + r := &Response{Page: 1, Words: []string{"Leena", "Sami", "Sara", "Zaki"}} + + j, _ := json.MarshalIndent(r, "", " ") + + fmt.Println(string(j)) +}