---
id: 56a802e2-3871-4746-aec4-fa4bdae4d4fd
title: Golang Mutex
---

# Description

[Mutex](https://golang.org/pkg/sync/#Mutex) allows up to add locks to
our data so it can be accessed safely in a concurrent manner. While
locked other threads can't access the data. `Mutexes` should generally
be used for [managing
state](https://github.com/golang/go/wiki/MutexOrChannel).

# Syntax

``` go
type Counter struct {
    mu    sync.Mutex
    value int
}

func (c *Counter) Inc() {
    c.mu.Lock()
    defer c.mu.Unlock()

    c.value++
}

func (c *Counter) Value() int {
    return c.value
}

func NewCounter() *Counter {
    return &Counter{}
}
```