タイトルの通りなのですが ある時、golangを書いていてvetコマンドを実行したときに警告が表示されました。 その警告を見て「へーそうなんだ」と思ったので今回はそれについて少し書きたいと思います。 表示される警告 その警告ですが下記のような文言が表示されます。 passes Lock by value: sync.Mutex これについて調べたんですが警告が表示される原因が 「mutexを値渡しで渡しているから」です。 手っ取り早く警告をなくしたい場合、mutexをポインタ渡しで渡せばオッケーです! なぜmutexを値渡しで渡すと警告が出るのか。 それは 「値コピーしてしまうとロックしている状態のまま別のmutexインスタンスになってしまうから」 です。 golangではmutexインスタンスは常にポインタ渡しで渡すようにしておきましょう。 実例 簡単な例ですがmutexを使用した場合に