2

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 にエクスポートされたフィールドがありません

4

1 に答える 1