diff --git a/LectureCodeExamples/HTTP/cookies/example_01/main.go b/LectureCodeExamples/HTTP/cookies/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..645374ad489582755d7df72322bc62f6555ff5a5
--- /dev/null
+++ b/LectureCodeExamples/HTTP/cookies/example_01/main.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+    "fmt"
+    "net/http"
+    "strconv"
+    "time"
+)
+
+func cookieSetter(w http.ResponseWriter, r *http.Request) {
+    counter, err := r.Cookie("counter")
+    if err != nil {
+        w.WriteHeader(http.StatusInternalServerError)
+        return
+    }
+    value, err := strconv.Atoi(counter.Value)
+    if err != nil {
+        w.WriteHeader(http.StatusInternalServerError)
+        return
+    }
+    value = value + 1
+    newCookie := http.Cookie{
+        Name: "counter",
+        Value: strconv.Itoa(value),
+    }
+    http.SetCookie(w, &newCookie)
+    w.WriteHeader(http.StatusOK)
+    return
+}
+
+func main() {
+    http.HandleFunc("/cookie", cookieSetter)
+    go http.ListenAndServe(":8090", nil)
+
+    url := "http://:8090/cookie"
+    req, err := http.NewRequest("GET",url,nil)
+    if err != nil {
+        panic(err)
+    }
+
+    client := http.Client{}
+
+    c := http.Cookie{
+        Name:"counter", Value:"1", Domain: "127.0.0.1",
+        Path: "/", Expires: time.Now().AddDate(1,0,0)}
+    req.AddCookie(&c)
+
+    fmt.Println("-->", req.Header)
+
+    resp, err := client.Do(req)
+    if err != nil {
+        panic(err)
+    }
+
+    fmt.Println("<--",resp.Header)
+}
diff --git a/LectureCodeExamples/HTTP/cookies/example_02/main.go b/LectureCodeExamples/HTTP/cookies/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..b68e1ba136d3683b2713b4a4189791befa130669
--- /dev/null
+++ b/LectureCodeExamples/HTTP/cookies/example_02/main.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+    "fmt"
+    "net/http"
+    "net/http/cookiejar"
+    url2 "net/url"
+    "strconv"
+)
+
+func cookieSetter(w http.ResponseWriter, r *http.Request) {
+    counter, err := r.Cookie("counter")
+    if err != nil {
+        w.WriteHeader(http.StatusInternalServerError)
+        return
+    }
+    value, err := strconv.Atoi(counter.Value)
+    if err != nil {
+        w.WriteHeader(http.StatusInternalServerError)
+        return
+    }
+    value = value + 1
+    newCookie := http.Cookie{
+        Name: "counter",
+        Value: strconv.Itoa(value),
+    }
+    http.SetCookie(w, &newCookie)
+    w.WriteHeader(http.StatusOK)
+}
+
+func main() {
+    http.HandleFunc("/cookie", cookieSetter)
+    go http.ListenAndServe(":8090", nil)
+
+    jar, err := cookiejar.New(nil)
+    if err != nil {
+        panic(err)
+    }
+    cookies := []*http.Cookie{
+        &http.Cookie{Name:"counter",Value:"1"},
+    }
+
+    url := "http://localhost:8090/cookie"
+    u, _ := url2.Parse(url)
+    jar.SetCookies(u, cookies)
+
+    client := http.Client{Jar: jar}
+
+    for i:=0; i<5; i++ {
+        _, err := client.Get(url)
+        if err != nil {
+            panic(err)
+        }
+        fmt.Println("Client cookie",jar.Cookies(u))
+    }
+}
diff --git a/LectureCodeExamples/HTTP/middleware/example_01/main b/LectureCodeExamples/HTTP/middleware/example_01/main
new file mode 100644
index 0000000000000000000000000000000000000000..0d9736fd258ba2f6a682ea8ed76895d870196159
Binary files /dev/null and b/LectureCodeExamples/HTTP/middleware/example_01/main differ
diff --git a/LectureCodeExamples/HTTP/middleware/example_01/main.go b/LectureCodeExamples/HTTP/middleware/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..613ad3d5f1b25d59499c15ba1e2204b6d901ba61
--- /dev/null
+++ b/LectureCodeExamples/HTTP/middleware/example_01/main.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+    "encoding/base64"
+    "net/http"
+    "strings"
+    "fmt"
+)
+
+type MyHandler struct{}
+
+func (mh *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request){
+    w.WriteHeader(http.StatusOK)
+    w.Write([]byte(`{"message": "Perfect!!!"}`))
+    return
+}
+
+func AuthMiddleware(next http.Handler) http.Handler {
+    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
+        header := r.Header.Get("Authorization")
+        if header == "" {
+            w.WriteHeader(http.StatusUnauthorized)
+            return
+        }
+
+        authType := strings.Split(header," ")
+        fmt.Println(authType)
+        fmt.Println(r)
+        if len(authType) != 2 || authType[0] != "Basic" {
+            w.WriteHeader(http.StatusUnauthorized)
+            return
+        }
+        credentials,err := base64.StdEncoding.DecodeString(authType[1])
+        if err != nil {
+            w.WriteHeader(http.StatusUnauthorized)
+            return
+        }
+        if string(credentials) == "Open Sesame" {
+            next.ServeHTTP(w, r)
+        }
+    })
+}
+
+func main() {
+    targetHandler := MyHandler{}
+    http.Handle("/authenticate", AuthMiddleware(&targetHandler))
+    fmt.Println("Starting server on port 8090")
+    panic(http.ListenAndServe(":8090", AuthMiddleware(&targetHandler)))
+}
diff --git a/LectureCodeExamples/HTTP/middleware/example_01/server b/LectureCodeExamples/HTTP/middleware/example_01/server
new file mode 100644
index 0000000000000000000000000000000000000000..30f4fe5f5774170c98660245ad645cca94fc79c9
Binary files /dev/null and b/LectureCodeExamples/HTTP/middleware/example_01/server differ
diff --git a/LectureCodeExamples/HTTP/middleware/example_02/main b/LectureCodeExamples/HTTP/middleware/example_02/main
new file mode 100644
index 0000000000000000000000000000000000000000..2b3a5fe4d488eada00853163869c9d8f3d6d77de
Binary files /dev/null and b/LectureCodeExamples/HTTP/middleware/example_02/main differ
diff --git a/LectureCodeExamples/HTTP/middleware/example_02/main.go b/LectureCodeExamples/HTTP/middleware/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..200dfc9b3e9e1649227fecee0ff71af5bbfc8441
--- /dev/null
+++ b/LectureCodeExamples/HTTP/middleware/example_02/main.go
@@ -0,0 +1,45 @@
+package main
+
+import "net/http"
+
+type MyHandler struct{}
+
+func (mh *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request){
+    w.WriteHeader(http.StatusOK)
+    w.Write([]byte(`{"message": "Perfect!!!"}`))
+    return
+}
+
+type Middleware func(http.Handler) http.Handler
+
+func ApplyMiddleware(h http.Handler, middleware ... Middleware) http.Handler {
+    for _, next := range middleware {
+        h = next(h)
+    }
+    return h
+}
+
+func SimpleMiddleware(next http.Handler) http.Handler {
+    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
+        value := w.Header().Get("simple")
+        if value == "" {
+            value = "X"
+        } else {
+            value = value + "X"
+        }
+        w.Header().Set("simple", value)
+        next.ServeHTTP(w,r)
+    })
+}
+
+func main() {
+
+    h := &MyHandler{}
+
+    http.Handle("/three", ApplyMiddleware(
+        h, SimpleMiddleware, SimpleMiddleware, SimpleMiddleware))
+    http.Handle("/one", ApplyMiddleware(
+        h, SimpleMiddleware))
+
+    panic(http.ListenAndServe(":8090", nil))
+}
diff --git a/LectureCodeExamples/HTTP/middleware/example_03/main.go b/LectureCodeExamples/HTTP/middleware/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..e154189757bc808f452373ce4e8c3a286fdd50f0
--- /dev/null
+++ b/LectureCodeExamples/HTTP/middleware/example_03/main.go
@@ -0,0 +1,59 @@
+package main
+
+import ("net/http"
+"encoding/base64"
+"strings"
+"fmt"
+)
+type MyHandler struct{}
+
+func (mh *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request){
+    w.WriteHeader(http.StatusOK)
+    w.Write([]byte("Perfect!!!"))
+    return
+}
+
+type Middleware func(http.Handler) http.Handler
+
+func ApplyMiddleware(h http.Handler, middleware ... Middleware) http.Handler {
+    for _, next := range middleware {
+        h = next(h)
+    }
+    return h
+}
+
+func AuthMiddleware(next http.Handler) http.Handler {
+    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
+        header := r.Header.Get("Authorization")
+        if header == "" {
+            w.WriteHeader(http.StatusUnauthorized)
+            return
+        }
+
+        authType := strings.Split(header," ")
+        fmt.Println(authType)
+        fmt.Println(r)
+        if len(authType) != 2 || authType[0] != "Basic" {
+            w.WriteHeader(http.StatusUnauthorized)
+            return
+        }
+        credentials,err := base64.StdEncoding.DecodeString(authType[1])
+        if err != nil {
+            w.WriteHeader(http.StatusUnauthorized)
+            return
+        }
+        if string(credentials) == "Open Sesame" {
+            next.ServeHTTP(w, r)
+        }
+    })
+}
+
+func main() {
+
+    h := &MyHandler{}
+
+    http.Handle("/authenticate", ApplyMiddleware(
+        h, AuthMiddleware))
+
+    panic(http.ListenAndServe(":8090", nil))
+}
diff --git a/LectureCodeExamples/HTTP/requests/example_01/main b/LectureCodeExamples/HTTP/requests/example_01/main
new file mode 100644
index 0000000000000000000000000000000000000000..3f9772b3e5eb75e3df40800b4815f8b6b73e7a05
Binary files /dev/null and b/LectureCodeExamples/HTTP/requests/example_01/main differ
diff --git a/LectureCodeExamples/HTTP/requests/example_01/main.go b/LectureCodeExamples/HTTP/requests/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..088ce59e4149d75d64735bf3fbea6a97fe91bdfb
--- /dev/null
+++ b/LectureCodeExamples/HTTP/requests/example_01/main.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+    "bufio"
+    "fmt"
+    "net/http"
+)
+
+func main() {
+
+    //resp, err := http.Get("https://httpbin.org/get")
+    resp, err := http.Get("http://localhost:8090/info")
+    if err != nil {
+        panic(err)
+    }
+
+    fmt.Println(resp.Status)
+    fmt.Println(resp.Header["Content-Type"])
+
+    defer resp.Body.Close()
+    buf := bufio.NewScanner(resp.Body)
+
+    for buf.Scan() {
+        fmt.Println(buf.Text())
+    }
+}
diff --git a/LectureCodeExamples/HTTP/requests/example_02/main.go b/LectureCodeExamples/HTTP/requests/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..624eec956289ba273dbbd87d5afd2411c029e9e3
--- /dev/null
+++ b/LectureCodeExamples/HTTP/requests/example_02/main.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+    "bufio"
+    "bytes"
+    "fmt"
+    "net/http"
+)
+
+func main() {
+    bodyRequest := []byte(`{"user": "john","email":"john@gmail.com"}`)
+    bufferBody := bytes.NewBuffer(bodyRequest)
+
+    url := "https://httpbin.org/post"
+
+    resp, err := http.Post(url, "application/json", bufferBody)
+    if err != nil {
+        panic(err)
+    }
+    defer resp.Body.Close()
+
+    fmt.Println(resp.Status)
+    bodyAnswer := bufio.NewScanner(resp.Body)
+    for bodyAnswer.Scan() {
+        fmt.Println(bodyAnswer.Text())
+    }
+}
diff --git a/LectureCodeExamples/HTTP/requests/example_02a/main.go b/LectureCodeExamples/HTTP/requests/example_02a/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..bee3fbda611abc3adaa988b58d8ada301c0c6e7d
--- /dev/null
+++ b/LectureCodeExamples/HTTP/requests/example_02a/main.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+    "bufio"
+    "fmt"
+    "net/http"
+    "net/url"
+)
+
+func main() {
+
+    target := "https://httpbin.org/post"
+
+    resp, err := http.PostForm(target,
+        url.Values{"user": {"john"}, "email": {"john@gmail.com"}})
+    if err != nil {
+        panic(err)
+    }
+    defer resp.Body.Close()
+
+    fmt.Println(resp.Status)
+    bodyAnswer := bufio.NewScanner(resp.Body)
+    for bodyAnswer.Scan() {
+        fmt.Println(bodyAnswer.Text())
+    }
+}
diff --git a/LectureCodeExamples/HTTP/requests/example_03/main.go b/LectureCodeExamples/HTTP/requests/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..34b7ad6f13f2e783f0cf943f183a8576bb412a2e
--- /dev/null
+++ b/LectureCodeExamples/HTTP/requests/example_03/main.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+    "bufio"
+    "bytes"
+    "fmt"
+    "net/http"
+    "time"
+)
+
+func main() {
+    bodyRequest := []byte(`{"user": "john","email":"john@gmail.com"}`)
+    bufferBody := bytes.NewBuffer(bodyRequest)
+
+    url := "https://httpbin.org/put"
+
+    header := http.Header{}
+    header.Add("Content-type", "application/json")
+    header.Add("X-Custom-Header", "somevalue")
+    header.Add("User-Agent", "safe-the-world-with-go")
+
+    req, err := http.NewRequest(http.MethodPut, url, bufferBody)
+
+    if err != nil {
+        panic(err)
+    }
+
+    req.Header = header
+
+    client := http.Client{
+        Timeout: time.Second * 10,
+        }
+
+    resp, err := client.Do(req)
+    if err != nil {
+        panic(err)
+    }
+    defer resp.Body.Close()
+
+    fmt.Println(resp.Status)
+    bodyAnswer := bufio.NewScanner(resp.Body)
+    for bodyAnswer.Scan() {
+        fmt.Println(bodyAnswer.Text())
+    }
+}
diff --git a/LectureCodeExamples/HTTP/server/example_01/main b/LectureCodeExamples/HTTP/server/example_01/main
new file mode 100644
index 0000000000000000000000000000000000000000..d3079540554bd5c7d3161efc7bcd480f12d2c1d2
Binary files /dev/null and b/LectureCodeExamples/HTTP/server/example_01/main differ
diff --git a/LectureCodeExamples/HTTP/server/example_01/main.go b/LectureCodeExamples/HTTP/server/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..e03a4365e195902f6e05569cb72bce5200ddd933
--- /dev/null
+++ b/LectureCodeExamples/HTTP/server/example_01/main.go
@@ -0,0 +1,22 @@
+package main
+
+import (
+    "fmt"
+    "net/http"
+)
+
+func info(w http.ResponseWriter, r *http.Request){
+    for name, headers := range r.Header {
+        fmt.Println(name,headers)
+    }
+    w.Write([]byte(`{"answer": "Perfect!!!"}`))
+    return
+}
+
+func main() {
+
+    http.HandleFunc("/info", info)
+    panic(http.ListenAndServe(":8090", nil))
+}
+
+
diff --git a/LectureCodeExamples/HTTP/server/example_02/main.go b/LectureCodeExamples/HTTP/server/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..5609bfb511b3a745040173d0e1350c059c59b907
--- /dev/null
+++ b/LectureCodeExamples/HTTP/server/example_02/main.go
@@ -0,0 +1,25 @@
+package main
+
+import (
+    "net/http"
+)
+
+type MyHandler struct {}
+
+func(c *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+    switch r.RequestURI {
+    case "/hello":
+        w.WriteHeader(http.StatusOK)
+        w.Write([]byte("goodbye\n"))
+    case "/goodbye":
+        w.WriteHeader(http.StatusOK)
+        w.Write([]byte("hello\n"))
+    default:
+        w.WriteHeader(http.StatusBadRequest)
+    }
+}
+
+func main() {
+    handler := MyHandler{}
+    panic(http.ListenAndServe(":8090", &handler))
+}
diff --git a/LectureCodeExamples/HTTP/server/example_03/main.go b/LectureCodeExamples/HTTP/server/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..2f919eea960cab6c9f27dfbe7b3ab26babd1a251
--- /dev/null
+++ b/LectureCodeExamples/HTTP/server/example_03/main.go
@@ -0,0 +1,47 @@
+package main
+
+import (
+    "log"
+    "net/http"
+)
+
+func apiResponse(w http.ResponseWriter, r *http.Request) {
+  // Set the return Content-Type as JSON 
+  w.Header().Set("Content-Type", "application/json")
+  log.Println(r.RequestURI)
+  // Change the response depending on the method being requested
+  switch r.Method {
+    case "GET":
+      w.WriteHeader(http.StatusOK)
+      w.Write([]byte(`{"message": "GET method requested"}`))
+    case "POST":
+        w.WriteHeader(http.StatusCreated)
+        w.Write([]byte(`{"message": "POST method requested"}`))
+    default:
+        w.WriteHeader(http.StatusNotFound)
+        w.Write([]byte(`{"message": "Can't find method requested"}`))
+    }
+}
+
+func todoApiResponse(w http.ResponseWriter, r *http.Request) {
+  // Set the return Content-Type as JSON 
+  w.Header().Set("Content-Type", "application/json")
+  log.Println(r.RequestURI)
+  // Change the response depending on the method being requested
+  switch r.Method {
+    case "GET":
+      w.WriteHeader(http.StatusOK)
+      w.Write([]byte(`{"message": "GET method for todo requested"}`))
+    case "POST":
+        w.WriteHeader(http.StatusCreated)
+        w.Write([]byte(`{"message": "POST method for todo requested"}`))
+    default:
+        w.WriteHeader(http.StatusNotFound)
+        w.Write([]byte(`{"message": "Can't find todo method requested"}`))
+    }
+}
+func main() {
+  http.HandleFunc("/",apiResponse)
+  http.HandleFunc("/todos",todoApiResponse)
+  log.Fatal(http.ListenAndServe(":8090",nil))
+}
\ No newline at end of file
diff --git a/LectureCodeExamples/HTTP/server/example_03/server b/LectureCodeExamples/HTTP/server/example_03/server
new file mode 100644
index 0000000000000000000000000000000000000000..523c81f6f6e56ea39ad32aae520a3f1d9b4d6246
Binary files /dev/null and b/LectureCodeExamples/HTTP/server/example_03/server differ
diff --git a/LectureCodeExamples/data_transfer_encodings/csv/example_01/main.go b/LectureCodeExamples/data_transfer_encodings/csv/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..de97b2a445a2019069f4894697a9d3047ca67b2e
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/csv/example_01/main.go
@@ -0,0 +1,30 @@
+package main
+
+import (
+    "encoding/csv"
+    "fmt"
+    "io"
+    "log"
+    "strings"
+)
+
+
+func main() {
+    in := `user_id,score,password
+"Gopher",1000,"admin"
+"BigJ",10,"1234"
+"GGBoom",,"1111"
+`
+    r := csv.NewReader(strings.NewReader(in))
+
+    for {
+        record, err := r.Read()
+        if err == io.EOF {
+            break
+        }
+        if err != nil {
+            log.Fatal(err)
+        }
+        fmt.Println(record)
+    }
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/csv/example_02/main.go b/LectureCodeExamples/data_transfer_encodings/csv/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..b6df13e2a678f80081d4ee1be6f291ff3aa80cdc
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/csv/example_02/main.go
@@ -0,0 +1,25 @@
+package main
+
+import (
+    "encoding/csv"
+    "os"
+)
+
+func main() {
+    out := [][]string{
+        {"user_id","score","password"},
+        {"Gopher","1000","admin"},
+        {"BigJ","10","1234"},
+        {"GGBoom","","1111"},
+    }
+    writer := csv.NewWriter(os.Stdout)
+    for _, rec := range out {
+        err := writer.Write(rec)
+        if err != nil {
+            panic(err)
+        }
+    }
+    writer.Flush()
+
+}
+
diff --git a/LectureCodeExamples/data_transfer_encodings/json/example_01/main b/LectureCodeExamples/data_transfer_encodings/json/example_01/main
new file mode 100644
index 0000000000000000000000000000000000000000..acdb31e8da1bdc8a599b583e0f0b44eeb52462fb
Binary files /dev/null and b/LectureCodeExamples/data_transfer_encodings/json/example_01/main differ
diff --git a/LectureCodeExamples/data_transfer_encodings/json/example_01/main.go b/LectureCodeExamples/data_transfer_encodings/json/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..c9bec870d4eb8fa8ac26fb51014ba9c80562f5a2
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/json/example_01/main.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+"encoding/json"
+"fmt"
+)
+
+func main() {
+    number, err := json.Marshal(42)
+    if err!=nil{
+        panic(err)
+    }
+    fmt.Println(string(number))
+
+    float, _ := json.Marshal(3.14)
+    fmt.Println(string(float))
+
+    msg, _ := json.Marshal("This is a msg!!!")
+    fmt.Println(string(msg))
+
+    numbers, _ := json.Marshal([]int{1,1,2,3,5,8})
+    fmt.Println(string(numbers))
+
+    aMap, _ := json.Marshal(map[string]int{"one":1,"two":2})
+    fmt.Println(string(aMap))
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/json/example_02/main.go b/LectureCodeExamples/data_transfer_encodings/json/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..4dc2755e46c742aefcef5f0b189595bd10878a6c
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/json/example_02/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+"encoding/json"
+"fmt"
+)
+
+func main() {
+
+    aNumber, _ := json.Marshal(42)
+
+    var recoveredNumber int = -1
+    err := json.Unmarshal(aNumber, &recoveredNumber)
+    if err!= nil {
+        panic(err)
+    }
+    fmt.Println(recoveredNumber)
+
+
+    aMap, _ := json.Marshal(map[string]int{"one":1,"two":2})
+
+    recoveredMap := make(map[string]int)
+    err = json.Unmarshal(aMap, &recoveredMap)
+    if err != nil {
+        panic(err)
+    }
+    fmt.Println(recoveredMap)
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/json/example_03/main.go b/LectureCodeExamples/data_transfer_encodings/json/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..a6b562a19d09e01142af3053d9f10ef4f74a496c
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/json/example_03/main.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+    "bytes"
+    "encoding/json"
+    "fmt"
+)
+
+type User struct {
+    UserId string `json:"userId,omitempty"`
+    Score int `json:"score,omitempty"`
+    password string `json:"password,omitempty"`
+}
+
+func main() {
+
+    userA := User{"Gopher", 1000, "admin"}
+    userB := User{"BigJ", 10, "1234"}
+    userC := User{UserId: "GGBoom", password: "1111"}
+
+    db := []User{userA, userB, userC}
+    dbJson, err := json.Marshal(&db)
+    if err != nil {
+        panic(err)
+    }
+
+    fmt.Println(string(dbJson))
+
+    var indented bytes.Buffer
+    err = json.Indent(&indented, dbJson,"","    ")
+    if err != nil {
+        panic(err)
+    }
+    fmt.Println(indented.String())
+
+    var recovered []User
+    err = json.Unmarshal(dbJson, &recovered)
+    if err != nil{
+        panic(err)
+    }
+
+    fmt.Println(recovered)
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/tags/example_01/main.go b/LectureCodeExamples/data_transfer_encodings/tags/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..98dec5e54b060573a506467d78a8621c35758324
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/tags/example_01/main.go
@@ -0,0 +1,92 @@
+package main
+
+import (
+    "bytes"
+    "encoding/json"
+    "errors"
+    "fmt"
+    "reflect"
+    "strings"
+)
+
+func Marshal(input interface{}) ([]byte, error) {
+    var buffer bytes.Buffer
+    t := reflect.TypeOf(input)
+    v := reflect.ValueOf(input)
+
+    buffer.WriteString("{")
+    for i:=0;i < t.NumField();i++ {
+        encodedField,err := encodeField(t.Field(i),v.Field(i))
+
+        if err != nil {
+            return nil, err
+        }
+        if len(encodedField) != 0 {
+            if i >0 && i<= t.NumField()-1 {
+                buffer.WriteString(", ")
+            }
+            buffer.WriteString(encodedField)
+        }
+    }
+    buffer.WriteString("}")
+    return buffer.Bytes(),nil
+}
+
+func encodeField(f reflect.StructField, v reflect.Value) (string, error) {
+
+    if f.PkgPath!=""{
+        return "",nil
+    }
+
+    if f.Type.Kind() != reflect.String {
+        return "", nil
+    }
+
+    tag, found := f.Tag.Lookup("pretty")
+    if !found {
+        return "", nil
+    }
+
+    result := f.Name+":"
+    var err error = nil
+    switch tag {
+    case "upper":
+        result = result + strings.ToUpper(v.String())
+    case "lower":
+        result = result + strings.ToLower(v.String())
+    default:
+        err = errors.New("invalid tag value")
+    }
+    if err != nil {
+        return "", err
+    }
+
+    return result, nil
+}
+
+type User struct {
+    UserId string `pretty:"upper"`
+    Email string `pretty:"lower"`
+    password string `pretty:"lower"`
+}
+
+type Record struct {
+    Name string `pretty:"lower" json:"name"`
+    Surname string `pretty:"upper" json:"surname"`
+    Age int `pretty:"other" json:"age"`
+}
+
+
+func main() {
+    u := User{"John", "John@Gmail.com", "admin"}
+
+    marSer, _ := Marshal(u)
+    fmt.Println("pretty user", string(marSer))
+
+    r := Record{"John", "Johnson",33}
+    marRec, _:= Marshal(r)
+    fmt.Println("pretty rec", string(marRec))
+
+    jsonRec, _ := json.Marshal(r)
+    fmt.Println("json rec",string(jsonRec))
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/xml/example_01/main.go b/LectureCodeExamples/data_transfer_encodings/xml/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..03ba15bdaa0ed686c1d930ff72325ac45a404822
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/xml/example_01/main.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+    "encoding/xml"
+    "fmt"
+)
+
+func main() {
+    number, err := xml.Marshal(42)
+    if err!=nil{
+        panic(err)
+    }
+    fmt.Println(string(number))
+
+    float, _ := xml.Marshal(3.14)
+    fmt.Println(string(float))
+
+    msg, _ := xml.Marshal("This is a msg!!!")
+    fmt.Println(string(msg))
+
+    numbers, _ := xml.Marshal([]int{1,2,2,3,5,8})
+    fmt.Println(string(numbers))
+
+    aMap, err := xml.Marshal(map[string]int{"one":1,"two":2})
+    fmt.Println(err)
+    fmt.Println("-",string(aMap),"-")
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/xml/example_02/main.go b/LectureCodeExamples/data_transfer_encodings/xml/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..50cbf5657f0a3f7dc029310db17b1e5becd6eb63
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/xml/example_02/main.go
@@ -0,0 +1,77 @@
+package main
+
+import (
+    "encoding/xml"
+    "errors"
+    "fmt"
+)
+
+type MyMap map[string]string
+
+func (s MyMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    tokens := []xml.Token{start}
+
+    for key, value := range s {
+        t := xml.StartElement{Name: xml.Name{"", key}}
+        tokens = append(tokens, t, xml.CharData(value), xml.EndElement{t.Name})
+    }
+
+    tokens = append(tokens, xml.EndElement{start.Name})
+
+    for _, t := range tokens {
+        err := e.EncodeToken(t)
+        if err != nil {
+            return err
+        }
+    }
+
+    return e.Flush()
+}
+
+func (a MyMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+
+    key := ""
+    val := ""
+
+    for {
+
+        t, _ := d.Token()
+        switch tt := t.(type) {
+
+        case xml.StartElement:
+            key = tt.Name.Local
+        case xml.CharData:
+            val = string(tt)
+        case xml.EndElement:
+            if len(key) != 0{
+                a[key] = val
+                key,val = "", ""
+            }
+            if tt.Name == start.Name {
+                return nil
+            }
+
+        default:
+            return errors.New(fmt.Sprintf("uknown %T",t))
+        }
+    }
+
+   return nil
+}
+
+
+func main() {
+
+    var theMap MyMap = map[string]string{"one": "1","two":"2","three":"3"}
+    aMap, _ := xml.MarshalIndent(&theMap, "", "    ")
+    fmt.Println(string(aMap))
+
+    var recoveredMap MyMap = make(map[string]string)
+
+    err := xml.Unmarshal(aMap, &recoveredMap)
+    if err != nil {
+        panic(err)
+    }
+
+    fmt.Println(recoveredMap)
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/xml/example_03/main.go b/LectureCodeExamples/data_transfer_encodings/xml/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..7fa7fc10aee1b2ce793ed0e154ffb14fbe7cedd1
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/xml/example_03/main.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+    "encoding/xml"
+    "fmt"
+)
+
+type User struct {
+    UserId string `xml:"userId,omitempty"`
+    Score int `xml:"score,omitempty"`
+    password string `xml:"password,omitempty"`
+}
+
+type UsersArray struct {
+    Users []User `xml:"users,omitempty"`
+}
+
+func main() {
+
+    userA := User{"Gopher", 1000, "admin"}
+    userB := User{"BigJ", 10, "1234"}
+    userC := User{UserId: "GGBoom", password: "1111"}
+
+    db := UsersArray{[]User{userA, userB, userC}}
+    dbXML, err := xml.Marshal(&db)
+    if err != nil {
+        panic(err)
+    }
+
+    var recovered UsersArray
+    err = xml.Unmarshal(dbXML, &recovered)
+    if err != nil{
+        panic(err)
+    }
+    fmt.Println(recovered)
+
+    var indented []byte
+    indented, err = xml.MarshalIndent(recovered,"","    ")
+    if err != nil {
+        panic(err)
+    }
+    fmt.Println(string(indented))
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/yaml/example_01/main.go b/LectureCodeExamples/data_transfer_encodings/yaml/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..db2d5ee35c84d1dc01cc8f0df9320ea2795ba78b
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/yaml/example_01/main.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+    "gopkg.in/yaml.v2"
+    "fmt"
+)
+
+func main() {
+    number, err := yaml.Marshal(42)
+    if err!=nil{
+        panic(err)
+    }
+    fmt.Println(string(number))
+
+    float, _ := yaml.Marshal(3.14)
+    fmt.Println(string(float))
+
+    msg, _ := yaml.Marshal("This is a msg!!!")
+    fmt.Println(string(msg))
+
+    numbers, _ := yaml.Marshal([]int{1,1,2,3,5,8})
+    fmt.Println(string(numbers))
+
+    aMap, _ := yaml.Marshal(map[string]int{"one":1,"two":2})
+    fmt.Println(string(aMap))
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/yaml/example_02/main.go b/LectureCodeExamples/data_transfer_encodings/yaml/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..7bbd4062d8bd2369f2aaf870142976451d95416d
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/yaml/example_02/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+    "fmt"
+    "gopkg.in/yaml.v2"
+)
+
+func main() {
+
+    aNumber, _ := yaml.Marshal(42)
+
+    var recoveredNumber int = -1
+    err := yaml.Unmarshal(aNumber, &recoveredNumber)
+    if err!= nil {
+        panic(err)
+    }
+    fmt.Println(recoveredNumber)
+
+
+    aMap, _ := yaml.Marshal(map[string]int{"one":1,"two":2})
+
+    recoveredMap := make(map[string]int)
+    err = yaml.Unmarshal(aMap, &recoveredMap)
+    if err != nil {
+        panic(err)
+    }
+    fmt.Println(recoveredMap)
+}
diff --git a/LectureCodeExamples/data_transfer_encodings/yaml/example_03/main.go b/LectureCodeExamples/data_transfer_encodings/yaml/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..1a66e09f3bca6d2ebd8e6bac6db97e741a640b06
--- /dev/null
+++ b/LectureCodeExamples/data_transfer_encodings/yaml/example_03/main.go
@@ -0,0 +1,33 @@
+package main
+
+import (
+    "fmt"
+    "gopkg.in/yaml.v2"
+)
+
+type User struct {
+    UserId string `yaml:"userId,omitempty"`
+    Score int `yaml:"score,omitempty"`
+    password string `yaml:"password,omitempty"`
+}
+
+func main() {
+
+    userA := User{"Gopher", 1000, "admin"}
+    userB := User{"BigJ", 10, "1234"}
+    userC := User{UserId: "GGBoom", password: "1111"}
+
+    db := []User{userA, userB, userC}
+    dbYaml, err := yaml.Marshal(&db)
+    if err != nil {
+        panic(err)
+    }
+    fmt.Println(string(dbYaml))
+
+    var recovered []User
+    err = yaml.Unmarshal(dbYaml, &recovered)
+    if err != nil{
+        panic(err)
+    }
+    fmt.Println(recovered)
+}
diff --git a/LectureCodeExamples/input_output/files/example_01/main.go b/LectureCodeExamples/input_output/files/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..2e3e79ae65fd2e58234cccc9fd5ed12dbdf29022
--- /dev/null
+++ b/LectureCodeExamples/input_output/files/example_01/main.go
@@ -0,0 +1,24 @@
+package main
+
+import (
+    "fmt"
+    "io/ioutil"
+)
+
+func main() {
+    msg := "Save the world with Go!!!"
+    filePath := "/tmp/msg"
+
+    err := ioutil.WriteFile(filePath,
+        []byte(msg), 0644)
+    if err != nil {
+        panic(err)
+    }
+
+    read, err := ioutil.ReadFile(filePath)
+    if err != nil{
+        panic(err)
+    }
+
+    fmt.Printf("%s\n", read)
+}
diff --git a/LectureCodeExamples/input_output/files/example_02/main.go b/LectureCodeExamples/input_output/files/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..3343aca1bc0022de1f78e0555e2b2f9d56bc4334
--- /dev/null
+++ b/LectureCodeExamples/input_output/files/example_02/main.go
@@ -0,0 +1,21 @@
+package main
+
+import (
+    "os"
+)
+
+func main() {
+    filePath := "/tmp/msg"
+    msg := []string{
+        "Rule", "the", "world", "with", "Go!!!"}
+
+    f, err := os.Create(filePath)
+    if err != nil {
+        panic(err)
+    }
+    defer f.Close()
+
+    for _, s := range msg {
+        f.WriteString(s+"\n")
+    }
+}
diff --git a/LectureCodeExamples/input_output/files/example_03/main.go b/LectureCodeExamples/input_output/files/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..0d22c7e46661860dae940cc2bfa560aefeed02d4
--- /dev/null
+++ b/LectureCodeExamples/input_output/files/example_03/main.go
@@ -0,0 +1,40 @@
+package main
+
+import (
+    "fmt"
+    "os"
+)
+
+func main() {
+    tmp := os.TempDir()
+    file, err := os.Create(tmp+"/myfile")
+    if err != nil {
+        panic(err)
+    }
+    defer file.Close()
+
+    msg := "Save the world with Go!!!"
+
+    _, err = file.WriteString(msg)
+    if err != nil {
+        panic(err)
+    }
+
+    positions := []int{4, 10, 20}
+    for _, i := range positions {
+        _, err := file.Seek(int64(i),0)
+        if err != nil {
+            panic(err)
+        }
+        file.Write([]byte("X"))
+    }
+    // Reset
+    file.Seek(0,0)
+    // Read the result
+    result := make([]byte,len(msg))
+    _, err = file.Read(result)
+    if err != nil {
+        panic(err)
+    }
+    fmt.Printf("%s\n",result)
+}
diff --git a/LectureCodeExamples/input_output/readers_writers/example_01/main.go b/LectureCodeExamples/input_output/readers_writers/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..9a0c0f7ea636f009e144309b8df864470ac0b362
--- /dev/null
+++ b/LectureCodeExamples/input_output/readers_writers/example_01/main.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+    "errors"
+    "fmt"
+    "io"
+)
+
+type MyReader struct {
+    data string
+    from int
+}
+
+func(r *MyReader) Read(p []byte) (int, error) {
+    if p == nil {
+        return -1, errors.New("nil target array")
+    }
+    if len(r.data) <= 0 || r.from == len(r.data){
+        return 0, io.EOF
+    }
+    n := len(r.data) - r.from
+    if len(p) < n {
+        n = len(p)
+    }
+    for i:=0;i < n; i++ {
+        b := byte(r.data[r.from])
+        p[i] = b
+        r.from++
+    }
+    if r.from == len(r.data) {
+        return n, io.EOF
+    }
+    return n, nil
+}
+
+func main() {
+    target := make([]byte,5)
+    empty := MyReader{}
+    n, err := empty.Read(target)
+    fmt.Printf("Read %d: Error: %v\n",n,err)
+    mr := MyReader{"Save the world with Go!!!",0}
+    n, err = mr.Read(target)
+    for err == nil {
+        fmt.Printf("Read %d: Error: %v -> %s\n",n,err, target)
+        n, err = mr.Read(target)
+    }
+    fmt.Printf("Read %d: Error: %v -> %s\n",n,err, target)
+}
diff --git a/LectureCodeExamples/input_output/readers_writers/example_02/main.go b/LectureCodeExamples/input_output/readers_writers/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..3d1ecaa788d26ecef9afd1aa2af373a8d9fcd830
--- /dev/null
+++ b/LectureCodeExamples/input_output/readers_writers/example_02/main.go
@@ -0,0 +1,41 @@
+package main
+
+import (
+    "errors"
+    "io"
+    "fmt"
+)
+
+type MyWriter struct {
+    data string
+    size int
+}
+
+func (mw *MyWriter) Write(p []byte) (int, error) {
+    if len(p) == 0 {
+        return 0, io.EOF
+    }
+    n := mw.size
+    var err error = nil
+    if len(p) < mw.size {
+        n = len(p)
+    } else {
+        err = errors.New("p larger than size")
+    }
+    mw.data = mw.data + string(p[0:n])
+
+    return n, err
+}
+
+func main() {
+    msg := []byte("the world with Go!!!")
+
+    mw := MyWriter{"Save ",6}
+    i := 0
+    var err error
+    for err == nil && i < len(msg) {
+        n, err := mw.Write(msg[i:])
+        fmt.Printf("Written %d error %v --> %s\n", n, err, mw.data)
+        i = i + n
+    }
+}
diff --git a/LectureCodeExamples/input_output/standard_io/example_01/main.go b/LectureCodeExamples/input_output/standard_io/example_01/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..8a54c31d1d325916cb5606ea47b8fcf99036d009
--- /dev/null
+++ b/LectureCodeExamples/input_output/standard_io/example_01/main.go
@@ -0,0 +1,15 @@
+package main
+
+import (
+    "fmt"
+    "os"
+)
+
+func main() {
+    msg := []byte("Save the world with Go!!!\n")
+    n, err := os.Stdout.Write(msg)
+    if err != nil {
+        panic(err)
+    }
+    fmt.Printf("Written %d characters\n",n)
+}
diff --git a/LectureCodeExamples/input_output/standard_io/example_02/main.go b/LectureCodeExamples/input_output/standard_io/example_02/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..6b34f1cbbd36c4569a6276b0085c90986a1569f0
--- /dev/null
+++ b/LectureCodeExamples/input_output/standard_io/example_02/main.go
@@ -0,0 +1,17 @@
+package main
+
+import (
+    "fmt"
+    "os"
+    "strings"
+)
+
+func main() {
+    target := make([]byte,50)
+    n, err := os.Stdin.Read(target)
+    if err != nil {
+        panic(err)
+    }
+    msg := string(target[:n])
+    fmt.Println(n,strings.ToUpper(msg))
+}
diff --git a/LectureCodeExamples/input_output/standard_io/example_03/main.go b/LectureCodeExamples/input_output/standard_io/example_03/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..7de7d264705c9a4257fdc354a1e22b5766517608
--- /dev/null
+++ b/LectureCodeExamples/input_output/standard_io/example_03/main.go
@@ -0,0 +1,20 @@
+package main
+
+import (
+    "bufio"
+    "fmt"
+    "os"
+    "strings"
+)
+
+func main() {
+    reader := bufio.NewReader(os.Stdin)
+    fmt.Print(">>> What do you have to say?\n")
+    fmt.Print("<<< ")
+    text, err := reader.ReadString('\n')
+    if err != nil {
+        panic(err)
+    }
+    fmt.Println(">>> You're right!!!")
+    fmt.Println(strings.ToUpper(text))
+}
diff --git a/LectureCodeExamples/input_output/standard_io/example_04/main.go b/LectureCodeExamples/input_output/standard_io/example_04/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..0ff584641852e4a2f290e51302ffaac08fe72a92
--- /dev/null
+++ b/LectureCodeExamples/input_output/standard_io/example_04/main.go
@@ -0,0 +1,21 @@
+package main
+
+import (
+    "bufio"
+    "fmt"
+    "os"
+)
+
+func main() {
+    scanner := bufio.NewScanner(os.Stdin)
+    fmt.Println(">>> What do you have to say?\n")
+    counter := 0
+    for scanner.Scan() {
+        text := scanner.Text()
+        counter = counter + len(text)
+        if counter > 15 {
+            break
+        }
+    }
+    fmt.Println("that's enough")
+}
diff --git a/LectureCodeExamples/input_output/standard_io/example_05/main.go b/LectureCodeExamples/input_output/standard_io/example_05/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..40fc05183e135cc22a7f7d58efceb68af62e515f
--- /dev/null
+++ b/LectureCodeExamples/input_output/standard_io/example_05/main.go
@@ -0,0 +1,18 @@
+package main
+
+import (
+    "bufio"
+    "os"
+    "time"
+)
+
+func main() {
+    writer := bufio.NewWriter(os.Stdout)
+
+    msg := "Save the world with Go!!!\n"
+    for _, letter := range msg {
+        time.Sleep(time.Millisecond*300)
+        writer.WriteByte(byte(letter))
+        writer.Flush()
+    }
+}