export がある場合、構造体を gob として保存できないという問題がありますsync.Mutex
。ミューテックスをアンエクスポートすると(大文字にしないことで)、すべてが機能するようです。これがなぜなのかを理解し、エクスポートされていないsync.Mutex
.
に関連する問題について Google でいくつかのヒットがあるsync.RWMutex
ようですが、これがなぜ起こるのかを実際に説明しているものはありません。
package main
import (
"sync"
"encoding/gob"
"os"
"fmt"
)
func writeGob(filePath string, object interface{}) error {
file, err := os.Create(filePath)
defer file.Close()
if err != nil {
return err
}
encoder := gob.NewEncoder(file)
err = encoder.Encode(object)
return err
}
type Dog struct {
Name string
GobMux sync.Mutex
}
func main() {
d := &Dog{Name: "Fido"}
err := writeGob("./gob", d)
fmt.Printf("Error: %v\n", err)
}
出力:
エラー: gob: type sync.Mutex にエクスポートされたフィールドがありません