package movepoint import ( "fmt" "sync" ) // Point struct type Point struct { mux sync.Mutex x int y int } // Move func func (p *Point) Move(x, y int) { defer p.mux.Unlock() p.mux.Lock() p.x += x p.y += y } // IsDiagonal func func (p *Point) IsDiagonal() bool { defer p.mux.Unlock() p.mux.Lock() return p.x == p.y || -p.x == p.y } // String func func (p *Point) String() string { p.mux.Lock() localX := p.x localY := p.y p.mux.Unlock() return fmt.Sprintf(" x = %d, y = %d", localX, localY) } // NewPoint func func NewPoint() (p *Point) { p = &Point{} return } // MovePoint struct type MovePoint struct { p *Point xmove int ymove int } // Run func func (mv *MovePoint) Run() { go func() { for true { mv.p.Move(mv.xmove, mv.ymove) } }() } // NewMovePoint func func NewMovePoint(p *Point, xmove int, ymove int) (mv *MovePoint) { mv = &MovePoint{p, xmove, ymove} return }