golang
已收录文章:14170篇
-
值类型赋值默认深拷贝,但含引用字段时需手动实现深拷贝。如User结构体中Tags为slice,直接赋值共享底层数组,修改u2.Tags会影响u1.Tags。可通过逐字段复制、gob序列化或第三方库实现深拷贝。手动方式性能最优,gob通用但慢且不支持不可导出字段和某些类型,复杂场景可用代码生成工具。392 收藏
-
答案:在Golang中通过接口和组合实现责任链模式,将请求处理分解为多个处理器,按顺序传递直至被处理。定义Handler接口,包含SetNext和Handle方法,各处理器实现该接口并决定是否处理请求或转发给下一个处理器。以审批流程为例,客服、主管、管理员分别处理不同类型请求,未匹配请求由链尾兜底。实际应用中可优化动态注册、上下文传递、日志追踪与并发安全,适用于中间件、权限校验等场景。392 收藏
-
推荐使用路径版本控制,如/v1/users和/v2/users,结构清晰易维护;Gin等框架支持分组路由实现版本隔离,便于调试与文档生成。392 收藏
-
资源竞争 channel 常用于并发通信,要保证并发安全,主要使用互斥锁。在并发的过程中,当一个内存被多个 goroutine 同时访问时,就会产生资源竞争的情况。这块内存也可以称为共享资源。 并发391 收藏
-
下面的代码使用go-redis客户端和gofakeit,参考和引用了Redis官方文章 单Redis实例场景 如果熟悉Redis的命令,可能会马上想到使用Redis的set if not exists操作来实现,并且现在标准的实现方式是SET resour391 收藏
-
Go语言中使用的垃圾回收使用的是标记清扫算法。进行垃圾回收时会 stoptheworld。不过,在当前 1.3 版本中,实现了精确的垃圾回收和并行的垃圾回收,大大地提高了垃圾回收的速度,进行垃圾回391 收藏