为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中的 json.Marshal 期间锁定对象

在 Go 中的 json.Marshal 期间锁定对象

Go
蝴蝶不菲 2021-06-22 09:02:20
当它被编组到 json 时,我想将 RLock/RUnlock 添加到结构中。下面的示例显示了我尝试做的事情。但是,它不起作用,因为json.Marshal调用了every ,它将运行该Object.MarshalJSON方法,该方法本身调用 json.Marshal,从而导致无限循环。例子:package mainimport (    "fmt"    "encoding/json"    "sync")type Object struct {    Name string    Value int    sync.RWMutex}func (o *Object) MarshalJSON() ([]byte, error) {    o.RLock()    defer o.RUnlock()    fmt.Println("Marshalling object")    return json.Marshal(o)}func main() {    o := &Object{Name: "ANisus", Value: 42}    j, err := json.Marshal(o)    if err != nil {        panic(err)    }    fmt.Printf("%s\n", j)}输出:编组对象编组对象编组对象...显然,我可以在调用 json.Marshal 之前删除 MarshalJSON 方法并在主函数中调用 Lock()。但是,我的问题是:有没有办法在结构的 MarshalJSON 方法中调用 json.Marshal (或至少让 json 包处理编码)?奖金问题为什么我的程序没有冻结?第二次递归调用 MarshalJSON 时,不应该锁定结构吗?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信