Golang Go语言中请教个 gin 的问题。
Golang Go语言中请教个 gin 的问题。
我用 gin 写了一个 web,实现的功能是从另一个网站的的接口中获取一个 json ,然后将 json 处理过滤后返回。
这个 json 结构非常复杂,在解析的过程中,我使用了很多次的 make(map[string]interface{}) 来解析。
我打好包刚运行时内存占用 2M 左右,第一次访问后内存涨到 4M,第二次访问涨到 5M,然后以后 一千次 访问内存会涨到 9M 左右,接着我又访问了十万次,内存涨到了 10.6M 就不动了 。
请问下为什么会出现如此怪异的内存波动?是不是存在内存泄漏?
第一次写 go 的项目,还请大家多多指教。
更多关于Golang Go语言中请教个 gin 的问题。的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
golang pprof 看一下堆栈
内存回收不是用完就立即回收的
json 解析还需要手动吗,gin 的话不是直接 bindjson 就完了吗。。。
头几次一直涨因为还没触发 GC 吧。十万次稳定在 10M,说明没有内存泄露,GC 很稳。Go 真是独立开发者福音,小服务器上跑全套足够用。对比 Java,10M 连 JVM 都起不起来。
不要自己用 struct 解析 json ,用三方库,我以前用的 gjson 这个,还行吧,凑活用
用 struct 是最方便的,不知道为啥一定要用 map[string]interface{},不嫌 type assertion 麻烦?
另外这个内存占用没有任何怪异之处
map[string]interface{} 应该是最糟糕的地方,struct 和 gjson 都还不错,可以看具体情况选择
你好!很高兴看到你对Go语言和Gin框架感兴趣。Gin是一个用Go编写的高性能HTTP Web框架,广泛用于构建Web应用和API。关于你提到的Gin问题,虽然我无法直接看到具体的问题描述,但我可以根据常见的一些Gin使用场景和疑问提供一些帮助。
-
路由问题:确保你的路由定义正确,并且路径和请求方法(GET、POST等)匹配。使用
r.GET
、r.POST
等方法来定义路由。 -
中间件使用:Gin支持中间件,可以通过
r.Use()
添加全局中间件,或在特定路由上通过handler.Use()
添加局部中间件。 -
绑定和验证:Gin提供了方便的数据绑定功能,可以使用
c.ShouldBind()
系列方法将请求数据绑定到结构体中,并进行自动验证。 -
模板渲染:如果你在使用HTML模板,确保模板文件路径正确,并且使用了
c.HTML()
方法来渲染模板。 -
错误处理:Gin支持自定义错误处理,可以通过
r.NoRoute()
和r.NotFound()
等方法来处理未匹配路由和404错误。 -
性能优化:Gin本身性能已经很好,但可以通过优化路由设计、减少中间件数量等方式进一步提升性能。
如果你有更具体的问题,比如代码片段中的错误或特定的功能实现,请提供更详细的信息,这样我可以给出更准确的解答。希望这些信息对你有所帮助!