推荐一本好书100 go mistakes
在你的Go代码中发现你甚至不知道自己正在犯的错误,并通过避免常见的错误和陷阱来提高你的生产力。100个Go错误以及如何避免它们向您展示了如何:躲避Go开发者最常犯的错误构建和组织您的Go应用程序有效地...
继续阅读goroutine调度
Go 使用称为 goroutine 的用户级线程,它比内核级线程更轻且更便宜。 例如,创建一个初始 goroutine 将占用 2KB 的堆栈大小,而内核级线程将占用 8KB 的堆栈大小。 还有,goroutine 比内...
继续阅读segmentfault+answer项目全解析(一):跑通本地环境
answer项目是、一个基于开源知识的问答社区软件。您可以使用它来快速建立您的问答社区,以获得产品技术支持、客户支持、用户交流等。answer是一个比较完整的项目,后端使用的golang,特别适合想学 segmentfa...
继续阅读go堆栈逃逸分析垃圾回收
堆栈一般堆栈栈一般由操作系统来分配和释放,堆由程序员通过编程语言来申请创建与释放。栈用来存放函数的参数、返回值、局部变量、函数调用时的临时上下文等,堆用来存放全局变量。我们可以这样理解数据存放的规则: 逃逸分析,垃圾回收...
继续阅读设计模式6原则之:开闭原则
概念一个软件实体如类、模块和函数应该对修改关闭,对扩展开放理解尽量减少对类文件的修改通过另一个分支扩展其功能实例版本1需求现在后台有课程小节编辑功能,打算增加一个小测验题型,并提供保存小测验的接口方案。开闭原则...
继续阅读singleFlight源码解析
SingleFlight作用是将并发请求合并成一个请求,以减少对下层服务的压力。应用场景大量的请求同时过来,查询一个已经失效的缓存,导致大量请求打到数据库(缓存击穿)如何使用?这个时候就需要使用singleFlight合...
继续阅读go select原理及使用场景
go select原理。类似c语言的多路复用,可以同时监听多个channel。当有channel可读可写之前会一直阻塞。两个 `case` 都是同时满足执行条件的,如果我们按照顺序依次判断,那么后面的条件永远都会得不到执...
继续阅读设计模式6原则之:单一职责原则
概念一个类或者模块只负责完成一个职责(或者功能)理解不要设计大而全的类,要设计粒度小、功能单一的类一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一。单一职责原则...
继续阅读设计模式6原则之:里氏替换原则
概念一个软件实体如果适用一个父类的话,那一定是适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。什么情况下不符合里氏替换原则?通常情况下,都是子类 里氏替换原则...
继续阅读设计模式6原则之:依赖倒置原则
概念上层模块不应该依赖底层模块,它们都应该依赖于抽象抽象不应该依赖于细节,细节应该依赖于抽象理解(为了方便以下代码均为伪代码)假如我们有个课件类,需要对小节进行一些操作,目前我们业务中只用到了视频小节 依赖倒置原则。依赖...
继续阅读设计模式6原则之:迪米特法则
概念迪米特法则:又叫【最少知道原则】,一个类不应该知道自己操作的类的细节,也就是说,只和朋友谈话,不和陌生人谈话理解一个类不应该知道自己操作的类的细节有这样一个场景,我们课件中有一个视频小节,现在需要...
继续阅读go defer运行机制
概念Go语言的defer会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。现象defer先进后出packagemainimport"fmt"f defer闭包,预...
继续阅读go panic和recover
概念panic能够改变程序的控制流,调用panic后会立刻停止执行当前函数的剩余代码,并在当前Goroutine中递归执行调用方的defer;recover可以中止panic造成的程序崩溃。它是一个只 recover必须...
继续阅读