# data_collect_gateway **Repository Path**: jixiangjun/data_collect_gateway ## Basic Information - **Project Name**: data_collect_gateway - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-20 - **Last Updated**: 2024-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 香橙派 zero 3 开发板资料 http://www.orangepi.cn/orangepiwiki/index.php/Orange_Pi_Zero_3 # 分层说明 base 基础公共层,不依赖其它任何模块,位于最底层 persistent 持久化层,依赖 base 层,位于第二层 business 业务层,依赖 persistent 层,位于第三层 注意不同层只能单向依赖,避免循环依赖 # 方法命名 如果方法内部封装了 goroutine,需要在方法名后面显示地加上 Async 以告知调用方,比如: ``` func (s *Service) FooAsync() { go func() { // do something }() } ``` # 优化方面 ## 变量的生命周期 ```go var global *int func f() { var x int x = 1 global = &x } ``` ```go func g() { y := new(int) *y = 1 } ``` 上述的例子中,x一定使用堆空间,因为函数在返回之后,我们在后续依然可以通过全局变量,这种情况,我们称为x 从方法f 中逃逸,g函数则相反。 逃逸在绝大多数情况下不需要我们专门去管理,但是他对于性能优化是有帮助的,因为每次一个变量逃逸,意味着需要分配堆内存,这个过程是比较耗时的,所以我们应该尽量避免逃逸。 自带垃圾回收的语言一般都不需要我们考虑内存负担,不需要显示地释放和回收内存,但是白那辆的生命周期是写出高效程序所必须清楚的。 最经典的优化是:在长生命周期的对象中,尽量不要关联短申明周期的对象的指针,特别是在全局变量中。