我遇到了一个问题,如果它有一个导出的sync.Mutex
. 如果我使互斥锁未导出(通过不将其大写),一切似乎都有效。我很想知道为什么会这样,并确保吞噬 unexported 没有其他问题sync.Mutex
。
我看到谷歌上有几个与 相关的问题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:类型 sync.Mutex 没有导出字段