diff --git a/exercise_0304/go.mod b/exercise_0304/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..3c219f0bc4fc506f72016dc92f087468a3a7a5e3
--- /dev/null
+++ b/exercise_0304/go.mod
@@ -0,0 +1,3 @@
+module gitlab.reutlingen-university.de/go-exercises/go-starter/exercise_0303
+
+go 1.20
diff --git a/exercise_0304/main.go b/exercise_0304/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..514802aca7d159b4de991dd636dcef543be16256
--- /dev/null
+++ b/exercise_0304/main.go
@@ -0,0 +1,37 @@
+package main
+
+import "fmt"
+
+type Areaer interface {
+	Area() int
+}
+
+type Rectangle struct {
+	length int
+	width  int
+}
+
+func (r Rectangle) Area() int {
+	return r.length * r.width
+}
+
+func (r *Rectangle) SetWidth(width int) {
+	r.width = width
+}
+
+func (r Rectangle) String() string {
+	return fmt.Sprintf("{l: %d, w: %d}", r.length, r.width)
+}
+
+func createShape() Areaer {
+	return Rectangle{length: 10, width: 5}
+}
+
+func main() {
+	r := Rectangle{length: 10, width: 5}
+	r.SetWidth(9)
+	fmt.Println(r.Area())
+	s := createShape()
+	fmt.Println(s.Area())
+	fmt.Println(r)
+}