¿Cómo podemos usar canales en Go en lugar de mutex?

Los canales combinan la comunicación (el intercambio de un valor) con la sincronización, lo que garantiza que dos cálculos (gorutinas) se encuentren en un estado conocido.

¿Cómo es posible usar los canales en Google Go para realizar la funcionalidad de mutex?

package main

import "sync"

var global int = 0
var m sync.Mutex

func thread1(){
    m.Lock()
    global = 1
    m.Unlock()
}

func thread2(){
    m.Lock()
    global = 2
    m.Unlock()
}

func main(){
   go thread1()
   go thread2()
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta