diff --git a/src/gofabric/main.go b/src/gofabric/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..4d95bda1994c28f30e5e884e5421d70cc1634fe4
--- /dev/null
+++ b/src/gofabric/main.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"fmt"
+	"sync"
+)
+
+const (
+	PRODUCERS = 10
+	CONSUMERS = 10
+)
+
+var (
+	ch chan string
+	wg sync.WaitGroup
+)
+
+func main() {
+	ch = make(chan string)
+	for i := 1; i < PRODUCERS; i++ {
+		createProducer(i)
+	}
+	for i := 1; i < CONSUMERS; i++ {
+		createConsumer(i)
+	}
+	// wait for producer and consumers
+	wg.Wait()
+	fmt.Println("Consumers and producers are finished.")
+}
+
+func createConsumer(i int) {
+	fmt.Printf("Starting consumer %d\n", i)
+	wg.Add(1)
+	go func() {
+		defer wg.Done()
+		msg := <-ch
+		fmt.Printf("Consumer %d received message: %v\n", i, msg)
+	}()
+}
+
+func createProducer(i int) {
+	fmt.Printf("Starting producer %d\n", i)
+	wg.Add(1)
+	go func() {
+		defer wg.Done()
+		ch <- fmt.Sprintf("Hi from producer %d", i)
+		fmt.Printf("Producer %d done\n", i)
+	}()
+}