Composition for actions

Hello everyone, I’m new to Golang. I wanted to try out classes that are composed out of actions. So a player can walk() and fly(), but perhaps a monster can only walk().

In this case both the walk() and fly() methods need to access the position of the player, so I came up with the following code. However I wonder if this is truly Golang idiomatic. A thing I don’t like is that the same pointer is owned by multiple objects.

// You can edit this code!
// Click here and start typing.
package main

import "fmt"

type PositionComponent struct {
	x int
	y int

type Positionable interface {
	GetPositionComponent() *PositionComponent
	SetPositionComponent(x int, y int)

func (p *PositionComponent) GetPositionComponent() *PositionComponent {
	return p

func (p *PositionComponent) SetPositionComponent(x int, y int) {
	p.x = x
	p.y = y

type Walker struct {

type Flyer struct {

func (w *Walker) walk() {
	w.GetPositionComponent().x += 1
	fmt.Printf("Walked: %s\n", w.GetPositionComponent())

func (w *Flyer) fly() {
	w.GetPositionComponent().y += 1
	fmt.Printf("Flew: %s\n", w.GetPositionComponent())

type Player struct {

func main() {
	pComp := PositionComponent{2, 2}
	p := Player{&pComp, Walker{&pComp}, Flyer{&pComp}}

Go playground