diff --git a/src/gojoke/go.mod b/src/gojoke/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..c2acb831a0b8ddf7526392ebff65c753f0de7c3a
--- /dev/null
+++ b/src/gojoke/go.mod
@@ -0,0 +1,3 @@
+module github.com/turngeek/examples-go/src/gojoke
+
+go 1.16
diff --git a/src/gojoke/main.go b/src/gojoke/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..a7cc87e3fb98c955ea9b513255a0f7e90d33dd85
--- /dev/null
+++ b/src/gojoke/main.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+	"encoding/json"
+	"fmt"
+	"log"
+	"net/http"
+)
+
+const (
+	url = "http://api.icndb.com/jokes/random"
+)
+
+func main() {
+	fmt.Printf("Calling joke service %s ...\n", url)
+	resp, err := http.Get(url)
+	if err != nil {
+		log.Fatalf("Can't access %s\n#%v", url, err)
+	}
+	jokeResponse := JokeResponse{}
+	decoder := json.NewDecoder(resp.Body)
+	err = decoder.Decode(&jokeResponse)
+	if err != nil {
+		log.Fatalf("Bad response\n:#%v", err)
+	}
+	log.Printf("Joke of the Day:\n%s", jokeResponse.Value.Joke)
+}
diff --git a/src/gojoke/types.go b/src/gojoke/types.go
new file mode 100644
index 0000000000000000000000000000000000000000..01a79d43d87eb44f6998edefd0520b3976a2cfc3
--- /dev/null
+++ b/src/gojoke/types.go
@@ -0,0 +1,12 @@
+package main
+
+type JokeResponse struct {
+	Type  string `json:"type"`
+	Value Value  `json:"value"`
+}
+
+type Value struct {
+	Id         int      `json:"id"`
+	Joke       string   `json:"joke"`
+	Categories []string `json:"categories"`
+}