我正在编写一个小型的Web服务器程序,它会从POST请求中进行大量的JSON解码.
最初我认为,不是json.Decoder每次请求进入时都初始化一个新的,我将它作为一个全局变量,每次都被调用,并与goroutines同时解码.
作为Go的新手,这可以吗?是否有时候我不应该这样做,并且由于不是线程安全而且课程会变得怪异(我猜"goroutine"安全会更好)?
在Go中,json.NewDecoder将io.Reader作为输入参数并返回*json.Decoder.因此,由于我们为每个POST请求提供了不同的http.Request.Body(实现io.Reader),因此无法重用相同的Decoder.
正如Paul Hankin所提到的,你不能同时使用go对象,除非它们被记录为可以安全地同时使用.
例子 :
http.Client和http.Transport
客户端和传输对于多个goroutine的并发使用是安全的,并且效率应该只创建一次并重新使用.
地图
经过长时间的讨论,决定地图的典型使用不需要从多个goroutine安全访问.
如果您询问重用JSON解码器以避免重复代码,您可以查看Tigertonic和Go-Json-Rest等框架.
另外,您可以查看ffjson以加速JSON解码.