gpt4 book ai didi

json - 在 Go 中并发使用变量总是可以的吗?

转载 作者:IT王子 更新时间:2023-10-29 00:37:41 28 4
gpt4 key购买 nike

我正在编写一个小型网络服务器程序,它对传入的 POST 请求进行大量 JSON 解码。

最初我认为与其在每次收到请求时都初始化一个新的 json.Decoder,不如将其作为一个全局变量,每次都被调用并与 goroutines 同时解码。

作为Go的新手,这样可以吗?是否有时我不应该这样做,类会因为线程不安全而崩溃(我想“goroutine”安全会更好)?

最佳答案

在 Go 中,json.NewDecoder 将一个 io.Reader 作为输入参数并返回一个 *json.Decoder。因此,不可能重复使用相同的解码器,因为我们对每个 POST 请求都有不同的 http.Request.Body(它实现了 io.Reader)。

正如 Paul Hankin 所提到的,你不能同时使用 go 对象,除非它们被记录为可以安全地同时使用。

例子:

  1. http.Client & http.Transport

    Clients and Transports are safe for concurrent use by multiple goroutines and for efficiency should only be created once and re-used.

Source

  1. Maps

    After long discussion it was decided that the typical use of maps did not require safe access from multiple goroutines.

Source

如果您询问有关重用 JSON 解码器以避免代码重复的问题,您可以查看像 Tigertonic 这样的框架。和 Go-Json-Rest .

在旁注中,您可以查看 ffjson加快 JSON 解码。

关于json - 在 Go 中并发使用变量总是可以的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com