go context专题(四)- context 最佳实践和相关争议
来源:互联网 发布:淘宝怎么寄东西到澳洲 编辑:程序博客网 时间:2024/06/08 06:14
context最佳实践
Do not store Contexts inside a struct type; instead, pass a Context explicitly to each function that needs it. The Context should be the first parameter, typically named ctx;
不要把Context存在一个结构体当中,显式地传入函数。Context变量需要作为第一个参数使用,一般命名为ctx;
Do not pass a nil Context, even if a function permits it. Pass context.TODO if you are unsure about which Context to use;
即使方法允许,也不要传入一个nil的Context,如果你不确定你要用什么Context的时候传一个context.TODO
Use context Values only for request-scoped data that transits processes and APIs, not for passing optional parameters to functions;
使用context的Value相关方法只应该用于在程序和接口中传递的和请求相关的元数据,不要用它来传递一些可选的参数
The same Context may be passed to functions running in different goroutines; Contexts are safe for simultaneous use by multiple goroutines;
同样的Context可以用来传递到不同的goroutine中,Context在多个goroutine中是安全的
争议--该不该使用context传递数据
首先要理解Context只是一种辅助机制,其是一种补偿机制,其使用不应该影响主业务流程;使用其辅助传递一些元信息,或者通知进行资源的回收;使用Context不能影响到你的正常的业务流程,程序不要期待在Context传递一些必须的参数等,没有这些参数,程序应该也能正常的工作。
在Context中传值的坏处:
1.传递的都是interface{}类型的值,编译器不能进行严格的类型校验;
2.从interface{}到具体类型需要使用类型断言和接口查询,这个有一定的运行期开销,有性能损失;
3.值在传递过程中有可能被覆盖,而不易被发现;
4.这种传递信息非常不简明,清晰,而是晦涩隐含的;不能通过代码或者文档一眼看到传递什么;
context可以传递什么
可以传递什么信息:
日志信息
调试信息
不影响正常行为的其他信息
参见 https://medium.com/@cep21/how-to-correctly-use-context-context-in-go-1-7-8f2c0fafdf39
- go context专题(四)- context 最佳实践和相关争议
- go context专题(二)- context设计目的和基本数据结构
- go context专题(三)- context 工作机制和代码分析
- go context专题(一)- go 并发编程基础设施
- context相关
- Context相关
- Context相关
- Go Context包使用
- Servlet中context和session相关listener
- Context
- Context
- Context
- context
- Context
- context
- Context
- Context
- Context
- 模板方法模式
- 不能访问虚机中的linux系统中的tomcat中的应用链接(带端口)
- Jquery+Ajax使用实例
- Android第三方库学习进度表
- 表单相关新增元素和属性 4
- go context专题(四)- context 最佳实践和相关争议
- 身为JAVA工作者必须了解的实战知识(七)
- Servlet的生命周期01
- redis之事务&&主从复制
- 初识c#---属性和参数传递
- 【CUGBACM15级BC第8场 B】hdu 4990 Reading comprehension
- redis搭建
- 身为JAVA工作者必须了解的实战知识(八)
- FileOutputStream、FileInputStream和BufferedOutputStream、FileInputStream 应用